1

私はこのコードを持っています。私には2つの特徴があります。2 つの機能を一緒にトレーニングするにはどうすればよいですか?

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 : ジェネリ = 2.2 : 1.0
word_before_you = 'when' ジェネリ : refere = 1.1 : 1.0

最後の機能しか得られないようです。分類子に 1 つではなく両方の機能をトレーニングさせるにはどうすればよいですか。

4

1 に答える 1

1

2 回定義lang_detectorしていますが、2 番目の定義は最初の定義を単純にオーバーライドします。各特徴名をキーとして、特徴のディクショナリを返す1 つの特徴抽出関数を定義します。あなたの場合、定義する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)
于 2014-10-03T22:51:28.933 に答える