Встроенный классификатор в 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
что теперь? Я посмотрел на источник, и оба являются классами, но не совсем одинаковыми.
classifier = NaiveBayesClassifier(train) >> <class 'textblob.classifiers.NaiveBayesClassifier'>
, а классификатор nltk создает класс:<class 'nltk.classify.naivebayes.NaiveBayesClassifier'>
— поэтому застрял на том, как заставить nltk работать в textblob. - person Marc Maxmeister   schedule 19.06.2018