2014-10-03 3 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 = '할']을 참조 : 2.2 = generi : 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