Ich mache Sentiment Analyse mit NLTK unter Verwendung der eingebauten Korpora movie_reviews
zum Training und jedes Mal, wenn ich neg
als Ergebnis bekommen.NLTK Classifier gibt nur negative als Antwort in Sentiment Analysis
Mein Code:
import nltk
import random
import pickle
from nltk.corpus import movie_reviews
from os.path import exists
from nltk.classify import apply_features
from nltk.tokenize import word_tokenize, sent_tokenize
documents = [(list(movie_reviews.words(fileid)), category)
for category in movie_reviews.categories()
for fileid in movie_reviews.fileids(category)]
all_words = []
for w in movie_reviews.words():
all_words.append(w.lower())
all_words = nltk.FreqDist(all_words)
word_features = list(all_words.keys())
print(word_features)
def find_features(document):
words = set(document)
features = {}
for w in word_features:
features[w] = (w in words)
return features
featuresets = [(find_features(rev), category) for (rev, category) in documents]
numtrain = int(len(documents) * 90/100)
training_set = apply_features(find_features, documents[:numtrain])
testing_set = apply_features(find_features, documents[numtrain:])
classifier = nltk.NaiveBayesClassifier.train(training_set)
classifier.show_most_informative_features(15)
Example_Text = " avoids annual conveys vocal thematic doubts fascination slip avoids outstanding thematic astounding seamless"
doc = word_tokenize(Example_Text.lower())
featurized_doc = {i:(i in doc) for i in word_features}
tagged_label = classifier.classify(featurized_doc)
print(tagged_label)
Hier ist NaiveBayes Classifier
bin mit dem ich die Daten mit dem movie_reviews
Corpora trainierte und verwende dann diesen trainierte Klassifikator das Gefühl meines Example_test
zu testen.
Jetzt, wie Sie meine Example_Text
sehen können, hat es einige zufällige Wörter. Wenn ich mache, gibt es mir eine Liste von 15 Wörtern, die das höchste Verhältnis von Positiv oder Negativ hat. Ich wählte die positiven Wörter in dieser Liste.
Most Informative Features
avoids = True pos : neg = 12.1 : 1.0
insulting = True neg : pos = 10.8 : 1.0
atrocious = True neg : pos = 10.6 : 1.0
outstanding = True pos : neg = 10.2 : 1.0
seamless = True pos : neg = 10.1 : 1.0
thematic = True pos : neg = 10.1 : 1.0
astounding = True pos : neg = 10.1 : 1.0
3000 = True neg : pos = 9.9 : 1.0
hudson = True neg : pos = 9.9 : 1.0
ludicrous = True neg : pos = 9.8 : 1.0
dread = True pos : neg = 9.5 : 1.0
vocal = True pos : neg = 9.5 : 1.0
conveys = True pos : neg = 9.5 : 1.0
annual = True pos : neg = 9.5 : 1.0
slip = True pos : neg = 9.5 : 1.0
Also, warum nicht ich pos
als Ergebnis bekommen, warum ist es, dass immer bekomme ich neg
selbst wenn der Klassifikator richtig ausgebildet worden ist?
wo Sie die 'featureset' mit? Ich denke nur ein Tippfehler, denn anstelle von featurized_doc, oder? Und kannst du bitte erklären, warum die frühere Methode nicht funktioniert hat, wobei der negative Wert mehr Einfluss hat und wie kann ich die Log-Wahrscheinlichkeit überprüfen? – Arkham
Und können Sie mir bitte erklären, was die Zeile 'featureset = {c: Wahr für c in Example_Text.split()}' tut? – Arkham
1. Ich meinte 'featurized_doc', ich habe meinen Beitrag aktualisiert, um das zu reflektieren. 2. 'classifier.prob_classify' anstelle von' classifier.classify' gibt Ihnen logarithmische Wahrscheinlichkeiten für jedes Label – akornilo