2014-10-03 49 views
1

我有這段代碼。我有兩個功能。我如何一起訓練這兩個功能?培訓兩個功能而不是一個

from textblob import TextBlob, Word, Blobber 
from textblob.classifiers import NaiveBayesClassifier 
from textblob.taggers import NLTKTagger 
import re 
import nltk 



def get_word_before_you_feature(mystring): 
    keyword = 'you' 
    before_keyword, keyword, after_keyword = mystring.partition(keyword) 
    before_keyword = before_keyword.rsplit(None, 1)[-1] 
    return {'word_after_you': before_keyword} 


def get_word_after_you_feature(mystring): 
    keyword = 'you' 
    before_keyword, keyword, after_keyword = mystring.partition(keyword) 
    after_keyword = after_keyword.split(None, 1)[0] 
    return {'word_after_you': after_keyword} 
    classifier = nltk.NaiveBayesClassifier.train(train) 



lang_detector = NaiveBayesClassifier(train, feature_extractor=get_word_after_you_feature) 
lang_detector = NaiveBayesClassifier(train, feature_extractor=get_word_before_you_feature) 


print(lang_detector.accuracy(test)) 
print(lang_detector.show_informative_features(5)) 

這是我得到的輸出。

word_before_you = '做' 參考,:generi = 2.2:1.0
word_before_you = '當' generi:參考,= 1.1:1.0

似乎只得到了最後一個特性。如何讓分類器訓練兩個特徵而不是一個特徵。

回答

1

您正在定義lang_detector兩次,而第二個定義僅覆蓋第一個。定義一個特徵提取函數,返回一個特徵字典,每個特徵名稱作爲關鍵字。在你的情況,你會定義get_word_features(mystring),它可以返回一個字典是這樣的:

return { 
    'word_after_you': after_keyword, 
    'word_before_you': before_keyword 
     } 

剩下的是你已經做了:通過特徵檢測器功能分類的構造,並檢查結果。

lang_detector = NaiveBayesClassifier(train, feature_extractor=get_word_features) 
lang_detector.show_most_informative_features(5) 
+0

感謝您的意見。它現在有效! – user3078335 2014-10-04 20:55:27