Python 的 NLTK 套件提供強大的文字分析和自然語言處理功能,能幫助企業從客戶評價中挖掘關鍵資訊。藉由詞頻統計,可以快速找出正面和負面評價中最常出現的詞彙,例如正面評價中的"easy"、“fine”、“decent”,以及負面評價中的"freezing"、“breaking"等,進而瞭解產品的優缺點。然而,詞彙的意義會隨著上下文變化,例如"cheap"可能指價格低廉或品質低劣,因此需考量上下文以避免誤判。NLTK 套件的word_tokenize函式可將文字分割成詞彙,並過濾非文字字元,方便後續分析。此外,移除停用詞和月份名稱等無關資訊,能更精確地掌握客戶評價的核心內容。

文字分析與自然語言處理

在進行文字分析時,瞭解文字中最常出現的詞彙對於掌握整體情感和意見非常重要。利用Python的Counter類別,可以輕易地統計出最常出現的詞彙。

最常出現的正面詞彙

透過分析正面評價的文字資料,可以發現某些詞彙的出現頻率較高。例如,“easy”、“fine”和“decent”等詞彙表明產品使用簡單,易於操作。這些資訊對於企業瞭解產品優勢和改進方向具有重要意義。

最常出現的負面詞彙

同樣,分析負面評價的文字資料也可以發現一些問題。例如,與“player freezing”和“breaking”相關的詞彙,表明產品可能存在穩定性和耐用性問題。這些資訊對於企業改進產品品質和解決客戶抱怨具有重要價值。

詞彙意義的多樣性

然而,某些詞彙的意義可能會因為上下文而有所不同。例如,“cheap”可能表示產品品質差,也可能表示價格便宜。同樣,“work”、“works”和“worked”等詞彙可能表示產品功能正常,也可能表示產品功能異常。因此,在進行文字分析時,需要考慮詞彙的上下文,以避免誤解其意義。

NLTK套件的應用

Python的NLTK套件是一種功能強大的自然語言處理工具。它提供了從詞彙分割到語義推理等一系列功能,能夠幫助開發者更好地處理和分析文字資料。

下載NLTK套件

要使用NLTK套件,需要先下載它。可以透過以下程式碼下載NLTK套件:

import nltk
nltk.download()

這將啟動NLTK套件的下載介面,允許使用者下載所需的套件。

文字分割和過濾

使用NLTK套件,可以輕易地將文字分割成個別的詞彙,並過濾掉非文字字元。以下程式碼示範瞭如何實作:

import nltk

# 載入文字資料
c14_mydata_1 = open('C:\\Desktop\\ANALYSIS\\product_review.txt', 'r')
c14_mydata_2 = c14_mydata_1.read()

# 將文字分割成個別的詞彙
c14_mydata_3 = nltk.word_tokenize(c14_mydata_2)

# 將詞彙轉換為小寫並過濾掉非文字字元
c14_mydata_4 = []
for x in c14_mydata_3:
    x = x.lower()
    if x.isalpha():
        c14_mydata_4.append(x)

這段程式碼首先載入文字資料,然後使用word_tokenize函式將文字分割成個別的詞彙。接著,它將每個詞彙轉換為小寫,並過濾掉非文字字元,最終得到一個只包含文字字元的詞彙列表。

看圖說話:

  flowchart TD
    A[載入文字資料] --> B[分割文字]
    B --> C[過濾非文字字元]
    C --> D[得到過濾後的詞彙列表]

這個流程圖描述瞭如何從原始文字資料中得到過濾後的詞彙列表。首先,載入文字資料;然後,使用NLTK套件將文字分割成個別的詞彙;接著,過濾掉非文字字元;最終,得到一個只包含文字字元的詞彙列表。

文字分析與客戶評價

在進行文字分析時,瞭解客戶評價的內容是非常重要的。這可以透過自然語言處理(NLP)技術來實作。首先,我們需要將文字轉換為小寫,以便於分析。

c14_mydata_4 = [word.lower() for word in c14_mydata_3]
print(c14_mydata_4)

接下來,我們需要移除停用詞(stop words),例如「the」、「and」等,這些詞對於分析沒有太大的意義。同時,我們也需要移除月份名稱,因為它們對於分析也沒有太大的意義。

from nltk.corpus import stopwords
stop_words = set(stopwords.words('english'))
new_stop_words = nltk.word_tokenize("january february march april may june july august september october november december")
stop_words.update(new_stop_words)
c14_mydata_5 = [x for x in c14_mydata_4 if x not in stop_words]
print(c14_mydata_5)

然後,我們可以使用FreqDist來計算每個詞的頻率。

from nltk import FreqDist
fd = FreqDist(c14_mydata_5)
print(fd.items())

接下來,我們可以使用most_common來取得最常見的20個詞。

print(fd.most_common(20))

同時,我們也可以使用plot來視覺化這些結果。

fd.plot(20, cumulative=False)

透過這些分析,我們可以發現客戶評價中的一些重要詞彙,例如「music」、「songs」、「would」等。同時,也有一些詞彙給出了客戶對於產品特性的看法,例如「cheap」可能意味著「poor quality」或「low price」。

但是,單純的詞彙分析可能不足以完全理解客戶的需求。因此,我們需要進一步分析詞彙之間的關係。這可以透過BigramCollocationFinder來實作。

from nltk.metrics import BigramAssocMeasures
coll_words = BigramCollocationFinder.from_words(c14_mydata_5)
print(coll_words.nbest(BigramAssocMeasures.likelihood_ratio, 10))

透過這些分析,我們可以發現一些重要的詞彙組合,例如「center button」、「sound quality」、「screen freezing」等。這些結果可以幫助我們更好地理解客戶的需求和期望。

看圖說話:

此圖示為客戶評價中最常見的20個詞彙,透過頻率分佈和視覺化,可以清晰地看到哪些詞彙最受客戶關注。同時,也可以看到一些詞彙之間的關係,例如「cheap」和「quality」之間的關係。

import nltk
from nltk.corpus import stopwords
from nltk import FreqDist
from nltk.metrics import BigramAssocMeasures
from nltk.collocations import BigramCollocationFinder
import matplotlib.pyplot as plt  # 匯入matplotlib

try:  # 嘗試匯入word_tokenize,如果失敗則下載punkt
    nltk.word_tokenize("test sentence")
except LookupError:
    nltk.download('punkt')

try: # 嘗試使用stopwords,如果失敗則下載stopwords
    stopwords.words('english')
except LookupError:
    nltk.download('stopwords')


# 載入文字資料 (假設檔案存在,請替換成你的檔案路徑)
file_path = "C:\\Desktop\\ANALYSIS\\product_review.txt"  # 使用原始碼中的檔案路徑

try:
    with open(file_path, 'r', encoding='utf-8') as file: # 加入編碼處理,避免錯誤
        c14_mydata_2 = file.read()
except FileNotFoundError:
    print(f"Error: File not found at {file_path}")
    exit() # 如果找不到檔案,則結束程式


# 將文字分割成個別的詞彙
c14_mydata_3 = nltk.word_tokenize(c14_mydata_2)

# 將詞彙轉換為小寫並過濾掉非文字字元 (原始程式碼中這段程式碼沒有被使用,可以移除)
# c14_mydata_4 = []
# for x in c14_mydata_3:
#     x = x.lower()
#     if x.isalpha():
#         c14_mydata_4.append(x)

# 將詞彙轉換為小寫
c14_mydata_4 = [word.lower() for word in c14_mydata_3]


# 移除停用詞和月份名稱
stop_words = set(stopwords.words('english'))
new_stop_words = nltk.word_tokenize("january february march april may june july august september october november december")
stop_words.update(new_stop_words)
c14_mydata_5 = [x for x in c14_mydata_4 if x not in stop_words and x.isalpha()] # 也過濾掉非字母字元


# 計算詞頻
fd = FreqDist(c14_mydata_5)


# 顯示最常見的20個詞彙
print(fd.most_common(20))


# 繪製詞頻圖表
plt.figure(figsize=(12, 6))  # 調整圖表大小
fd.plot(20, cumulative=False)
plt.title("Top 20 Most Frequent Words")
plt.xlabel("Words")
plt.ylabel("Frequency")
plt.show()  # 顯示圖表


# 計算雙連詞
coll_words = BigramCollocationFinder.from_words(c14_mydata_5)
print(coll_words.nbest(BigramAssocMeasures.likelihood_ratio, 10))


# 玄貓風格結論:
深入剖析使用者經驗的文字資料後我們發現高頻詞彙揭示了產品的核心功能與使用者關注重點諸如music」、「songs等詞彙的頻繁出現印證了產品在音樂播放方面的核心價值然而,「cheap一詞的多重含義則提示我們需進一步區分使用者究竟在意的是價格優勢還是品質缺陷雙連詞分析則更精準地捕捉了使用者經驗的細節例如sound qualityscreen freezing直指產品的音質和穩定性問題展望未來結合更豐富的語境資訊與情感分析技術我們將能更深入地理解使用者需求並將其轉化為產品最佳化的方向對於注重使用者經驗的企業而言持續最佳化文字分析方法無疑是提升產品競爭力的關鍵策略

改進說明:

  • 檔案路徑處理: 使用 try...except 塊處理 FileNotFoundError,避免程式因檔案不存在而當機。
  • 編碼處理:open() 函式中加入 encoding='utf-8',處理可能出現的編碼錯誤。
  • 非字母字元過濾: 在移除停用詞時,加入 x.isalpha() 條件,過濾掉非字母字元,使分析結果更精確。
  • 圖表顯示: 明確使用 plt.show() 顯示圖表。
  • 圖表增強: 使用 plt.figure(figsize=(12, 6))plt.title()plt.xlabel()plt.ylabel() 使圖表更清晰易懂。
  • 玄貓風格結論: 提供符合要求的結論。

執行步驟:

  1. 確保已安裝 Python 和 nltk 套件。
  2. 將程式碼儲存為 Python 檔案 (例如: text_analysis.py)。
  3. product_review.txt 檔案放置在指定的路徑 C:\\Desktop\\ANALYSIS\\ 下。
  4. 在終端或命令提示字元中,導航到程式碼所在的目錄,然後執行 python text_analysis.py

這個修改後的版本更健壯,能更好地處理錯誤,並提供更清晰的分析結果。 記得安裝 matplotlib 函式庫: pip install matplotlib