2017-04-05 50 views
0

我有一些由他們的bigrams代表的列表,以及他們每次發生多少次。 bigrams來自於獨特的bigrams的詞彙。我想在這個如何在計數器上使用SklearnClassifier

使用SklearnClassifier(SVC)迄今爲止我所做的代碼:

train_ngrams = [(train_filtered_tweets[i], train_filtered_tweets[i + 1]) for 
i in range(len(train_filtered_tweets) - 1)] 
print "Tweets from train set as bigrams", Counter(train_ngrams) 

classif = SklearnClassifier(BernoulliNB()).train(train_ngrams) 
classify = SklearnClassifier(SVC(), sparse=False).train(Counter(train_ngrams)) 
print classify 

但我得到的錯誤:

AttributeError: 'str' object has no attribute 'iteritems' 

我認爲這是因爲我的train_ngrams不是特徵矢量,但我不知道如何製作它。

回答

1

您的培訓數據還需要特定的目標標籤。考慮下面這個例子從NLTK website拉:

>>> from nltk.classify import SklearnClassifier 
>>> from sklearn.naive_bayes import BernoulliNB 
>>> from sklearn.svm import SVC 
>>> train_data = [({"a": 4, "b": 1, "c": 0}, "ham"), 
...    ({"a": 5, "b": 2, "c": 1}, "ham"), 
...    ({"a": 0, "b": 3, "c": 4}, "spam"), 
...    ({"a": 5, "b": 1, "c": 1}, "ham"), 
...    ({"a": 1, "b": 4, "c": 3}, "spam")] 
>>> classif = SklearnClassifier(BernoulliNB()).train(train_data) 
>>> test_data = [{"a": 3, "b": 2, "c": 1}, 
...    {"a": 0, "b": 3, "c": 7}] 
>>> classif.classify_many(test_data) 
['ham', 'spam'] 
>>> classif = SklearnClassifier(SVC(), sparse=False).train(train_data) 
>>> classif.classify_many(test_data) 
['ham', 'spam'] 

正如你所看到的,目標標籤火腿垃圾。此外,您似乎正在使用Counter對象,而API正在查找元組列表,其中包含每個元組中的字數統計字典以及標籤。我不知道你爲你的推文語料庫創建了什麼樣的目標標籤,但是我可以告訴你如何爲你的語料庫生成雙克頻率詞典,假設你的語料庫是一個可迭代的,每個元素都是推文。

mybigramlist = [] 
for tweet in corpus: 
    tokens = nltk.word_tokenize(tweet) 
    bgs = nltk.bigrams(tokens) # get the bigrams 
    freqs = nltk.FreqDist(bgs) # this is dictionary of the bigrams with their frequencies in the tweet 
    mybigramlist.append(freqs) 

現在,所有你需要做的就是找出你的標籤是什麼,然後使附着在給定文檔中的結構最終的訓練數據。

+0

我試過使用這個,但我得到的只是一個沒有回報?你知道這是爲什麼嗎? – MyTivoli

+0

你的語料庫是推文列表。例如。 '語料庫= [「我們之間的獨角獸獨角獸」,「這是鳴叫二」,「鳴叫三是積極的情緒!」]?另外,如果您正在查看推文,最好使用[TweetTokenizer](http://www.nltk.org/api/nltk.tokenize.html#nltk.tokenize.casual.TweetTokenizer) –

+0

數據集只是很多推文,我試圖在數據上使用分類器,看起來像這樣; [('1','hello'),('hello','said'),('said','someone'),('someone','country'),('country','fasting') ]('''',''''),('''''',''''),('''''''''''','''''''') ')] – MyTivoli

相關問題