iT邦幫忙

2025 iThome 鐵人賽

DAY 22
0
AI & Data

30 天打造 App 評論洞察系統:用 AI 讓產品團隊更懂用戶系列 第 27

【Day 26】系統開發設計與實作(3/4)

  • 分享至 

  • xImage
  •  

這篇文章將探討如何利用程式從大量的評論文本中找出重要的關鍵詞,並用它們來生成文字雲,幫助我們快速掌握使用者關注的焦點。

上一篇我們將 App 評論資料從試算表讀取出來並進行了基礎統計。但光有數字還不夠,我們需要深入了解使用者在評論中到底提到了什麼。
這時候,詞頻-逆向文件頻率(TF-IDF) 分析就能派上用場。這是一種常用的文字探勘技術,能幫助我們找出那些在特定文件中重要、但在所有文件中不那麼常見的詞語。


1. 中文分詞與 N-Gram

對於中文,我們無法像英文一樣簡單地用空格來分詞。因此,我們使用 N-Gram 技術來生成詞語。
簡單來說,N-Gram 會從一段文字中,以 N 個字為單位來切割詞語。
例如,應用程式 這個詞,我們可以切成 應用用程程式 等 2-gram 詞語。

TfIdfService.gs 檔案中的 tokenizeChineseNGram 函式就是用來執行這項任務的。
它會將評論文本轉換成一系列的詞語清單,同時會移除標點符號和一些常見的停用詞(如「的」、「了」等)。

var STOPWORDS = new Set([
  "的","了","和","是","在","與","及","也","很","不","沒","沒有",
  "我們","你們","他們","這個","那個","如果","因此","可以","不能",
  "無法","問題","感覺","真的","超級","非常","一下","一下子"
]);

function tokenizeChineseNGram(text, minN, maxN) {
  //...(略)
  var tokens = [];
  for (var i = 0; i < src.length; i++) {
    for (var n = minN; n <= maxN; n++) {
      var g = src.slice(i, i + n);
      if (g.length === n && !STOPWORDS.has(g)) tokens.push(g);
    }
  }
  return tokens;
}

2. 計算 TF-IDF 分數

有了詞語清單後,computeTfidf 函式會計算每個詞語的 TF-IDF 分數。

  • TF(詞頻):某個詞在單一評論中出現的頻率
  • IDF(逆向文件頻率):這個詞在所有評論中出現的頻率,頻率越低,IDF 越高

此外,這個函式還特別考慮了評論的星等。

例如,評分低的評論(1-2 顆星)中的關鍵詞會被給予更高的權重,這有助於我們找出那些與負面體驗高度相關的關鍵詞。

function computeTfidf(reviews, options) {
  //...(略)
  var docs = reviews.map(function(r){
    return {
      row: r.row,
      rating: Number(r.rating) || 0,
      tokens: tokenizeChineseNGram(String(r.title || '') + String(r.review || ''))
    };
  });
  // 計算 TF-IDF 分數...
  var items = Array.from(scores.entries())
    .filter(function(e){ return (df.get(e[0]) || 0) >= minDocFreq; })
    .map(function(e){ return { text: e[0], weight: Number(e[1].toFixed(6)) }; })
    .sort(function(a,b){ return b.weight - a.weight; })
    .slice(0, 200);
  //...(略)
  return items;
}

3. 結果應用:生成文字雲

最後,computeTfidf 函式會根據分數對詞語進行排序,並回傳前 200 個最相關的詞語。

這些關鍵詞會被我們的網頁用來生成文字雲,讓使用者一眼就能看到評論的重點!


上一篇
【Day 25】系統開發設計與實作(2/4)
下一篇
【Day 27】系統開發設計與實作(4/4)
系列文
30 天打造 App 評論洞察系統:用 AI 讓產品團隊更懂用戶31
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言