训练两个特征而不是一个

时间:2014-10-03 18:25:18

标签: python machine-learning nlp nltk textblob

我有这个代码。我有两个功能。如何将这两个功能一起训练?

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 ='do'refere:generi = 2.2:1.0   
     word_before_you ='when'generi:refere = 1.1:1.0

似乎只能获得最后一项功能。如何让分类器训练两个特征而不是一个。

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)