我有这段代码。我有两个特征。我如何将这两个特征一起训练?
from textblob import TextBlob, Word, Blobberfrom textblob.classifiers import NaiveBayesClassifierfrom textblob.taggers import NLTKTaggerimport reimport nltkdef 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 = ‘do’ refere : generi = 2.2 : 1.0
word_before_you = ‘when’ generi : refere = 1.1 : 1.0
看起来它只获取了最后一个特征。我如何让分类器同时训练两个特征而不是一个?
回答:
您定义了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)