Тренируйте две функции вместо одной

У меня есть этот код. У меня есть две особенности. Как обучить две функции вместе?

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 : 1.0
word_before_you = 'когда' общий : реферал = 1.1 : 1.0

Кажется, он получает только последнюю функцию. Как заставить классификатор обучать обе функции вместо одной.


person user3078335    schedule 03.10.2014    source источник


Ответы (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)
person alexis    schedule 03.10.2014