Встроенный классификатор в textblob довольно тупой.Он обучен обзорам фильмов, поэтому я создал огромный набор примеров в моем контексте (57 000 историй, классифицированных как положительные или отрицательные), а затем обучил его, используя nltk.
Я пытался использовать textblob для обучения, но это всегда не удавалось:
with open('train.json', 'r') as fp:
cl = NaiveBayesClassifier(fp, format="json")
Это будет работать часами и завершится ошибкой памяти.
Я посмотрел на источник и обнаружил, что он просто использует nltk и упаковку, поэтому я использовал это вместо этого, и это сработало.
Структура обучающего набора nltk должна была быть спискомКортежи, с первой частью был счетчик слов в тексте и частота появления.Вторая часть кортежа была «pos» или «neg» для настроения.
>>> train_set = [(Counter(i["text"].split()),i["label"]) for i in data[200:]]
>>> test_set = [(Counter(i["text"].split()),i["label"]) for i in data[:200]] # withholding 200 examples for testing later
>>> cl = nltk.NaiveBayesClassifier.train(train_set) # <-- this is the same thing textblob was using
>>> print("Classifier accuracy percent:",(nltk.classify.accuracy(cl, test_set))*100)
('Classifier accuracy percent:', 66.5)
>>>>cl.show_most_informative_features(75)
Затем я его мариновал.
with open('storybayes.pickle','wb') as f:
pickle.dump(cl,f)
Теперь ... Я взял этот маринованный файл иснова открыл его, чтобы получить nltk.classifier 'nltk.classify.naivebayes.NaiveBayesClassifier'> - и попытался вставить его в textblob.Вместо
from textblob.classifiers import NaiveBayesClassifier
blob = TextBlob("I love this library", analyzer=NaiveBayesAnalyzer())
я попробовал:
blob = TextBlob("I love this library", analyzer=myclassifier)
Traceback (most recent call last):
File "<pyshell#116>", line 1, in <module>
blob = TextBlob("I love this library", analyzer=cl4)
File "C:\python\lib\site-packages\textblob\blob.py", line 369, in __init__
parser, classifier)
File "C:\python\lib\site-packages\textblob\blob.py", line 323, in
_initialize_models
BaseSentimentAnalyzer, BaseBlob.analyzer)
File "C:\python\lib\site-packages\textblob\blob.py", line 305, in
_validated_param
.format(name=name, cls=base_class_name))
ValueError: analyzer must be an instance of BaseSentimentAnalyzer
что теперь?Я посмотрел на источник, и оба класса, но не совсем то же самое.