情感分類 example

2021-07-28 11:45:33 字數 2229 閱讀 8628

title: 情感分類–example

tags: nltk

最近在讀《natural language processing with python》,重點是學習如何進行文字的情感分類。在學習了一些簡單的python和nltk後,實踐第六章中的文件分類。由於自己用的是python3.5,而書中**是python2.7的,其中部分函式有所變化,debug的過程也踩了不少坑,記錄在這裡。下面就一步一步的踩坑。

import nltk

from nltk.corpus import movie_reviews

import random

發現比書中多了兩行,不新增第一行無法呼叫後面的一些函式:nltk.freqdistnltk.*****bayesclassifier.trainnltk.classify.accuracy,第三行是一樣的原因:random.shuffle。其實這個在書的其他地方已經提到了。

documents =[(list(movie_reviews.words(fileid)),category)

for category in movie_reviews.categories()

for fileid in movie_reviews.fileids(category)]

random.shuffle(documents)

載入語料庫,documents的格式是這樣的:

all_words = nltk.freqdist(w.lower() for w in movie_reviews.words())

word_features=[word for (word, freq) in all_words.most_common(2000)]

構建整個語料庫中前2000個最頻繁詞的鍊錶作為特徵。

第二句就是乙個大坑了。word_features =all_words.keys()[:2000]原句是這個,但是python3.5中dict.keys()並不支援該用法。有人將其改為word_features =list(all_words.keys())[:2000],這樣子確實可以通過,但是你會發現現在的word_features並不是前2000個最頻繁詞。然後,我們可以選用這個函式:dict.most_common(2000)來達到選取前2000最頻繁詞的目的。但是新的問題又來了,此函式返回的格式是這樣的:

然而我們後面只需要詞,不需要詞頻。所以[word for (word, freq) in all_words.most_common(2000)]達到最終目的。

def

document_features

(document):

document_words = set(document)

features = {}

for word in word_features:

features['contains(%s)' % word] = (word in document_words)

return features

定義了乙個函式,作用是提取文件特徵。就是看文件中的每一句話是否包含前2000最頻繁詞。print (document_features(movie_reviews.words('pos/cv957_8737.txt')))可以直**一下函式的輸出,與整個分類無關,注意pythom3.5與2.7中print函式用法的區別。

featuresets = [(document_features(d), c) for (d,c) in documents]
提取documents中的特徵,迴圈是因為上面提到的格式原因。

train_set,test_set=featuresets[100:],featuresets[:100]

classifier=nltk.*****bayesclassifier.train(train_set)

print (nltk.classify.accuracy(classifier,test_set))

劃分訓練集和測試集,訓練分類器,測試結果。

分類 情感分析

此課程是coursera 華盛頓大學開設的machine learning 專項的第一部分內容,僅做筆記 學習使用。通過使用者對amazon 產品的評價,通過對評價文字進行分詞,建立分類器分辨使用者評價屬於好評還是差評 不涉及中評 使用第三方庫為graphlab create。對於句子進行分詞,將帶...

情感分類 中文語料

title 情感分類 中文語料 data 2017 03 04 tags nltk 折騰了幾天終於上午用nltk實現了中文語料的分類。把整個流程記錄一下。用的是譚松波老師的酒店分類的語料庫,有四個版本 2000 balanced 4000 balanced 6000 balanced 10000 u...

python 文字情感分類

對於乙個簡單的文字情感分類來說,其實就是乙個二分類,這篇部落格主要講述的是使用scikit learn 來做文字情感分類。分類主要分為兩步 1 訓練,主要根據訓練集來學習分類模型的規則。2 分類,先用已知的測試集評估分類的準確率等,如果效果還可以,那麼該模型對無標註的待測樣本進行 下面實現了svm,...