Ich brauche Sentiment Analyse für eine Liste von Tweets in niederländischer Sprache gemacht und ich verwende conll2002
für die gleiche. Hier ist der Code, den ich verwende:Sentiment Analyse für niederländische Tweets mit NLTK Corpus confl2002
import nltk.classify.util
from nltk.classify import NaiveBayesClassifier
from nltk.corpus import conll2002
import time
t=time.time()
def word_feats(words):
return dict([(word, True) for word in words])
#negids = conll2002.fileids('neg')
def train():
#negids = conll2002.fileids('neg')
#posids = conll2002.fileids('pos')
negids = conll2002.fileids()
posids = conll2002.fileids()
negfeats = [(word_feats(conll2002.words(fileids=[f])), 'neg') for f in negids]
posfeats = [(word_feats(conll2002.words(fileids=[f])), 'pos') for f in posids]
negcutoff = len(negfeats)*3/4
poscutoff = len(posfeats)*3/4
trainfeats = negfeats[:negcutoff] + posfeats[:poscutoff]
testfeats = negfeats[negcutoff:] + posfeats[poscutoff:]
print 'train on %d instances, test on %d instances' % (len(trainfeats), len(testfeats))
classifier = NaiveBayesClassifier.train(trainfeats)
print 'accuracy:', nltk.classify.util.accuracy(classifier, testfeats)
classifier.show_most_informative_features()
x=train()
print x
print time.time()-t
Die obige Code funktioniert, aber mit der Ausgabe wie folgt:
train on 8 instances, test on 4 instances
accuracy: 0.5
Most Informative Features
poderlas = True pos : neg = 1.0 : 1.0
voert = True pos : neg = 1.0 : 1.0
contundencia = True pos : neg = 1.0 : 1.0
encuestocracia = None pos : neg = 1.0 : 1.0
alivien = None pos : neg = 1.0 : 1.0
Bogotá = True pos : neg = 1.0 : 1.0
Especialidades = True pos : neg = 1.0 : 1.0
hoofdredacteurs = True pos : neg = 1.0 : 1.0
quisieron = True pos : neg = 1.0 : 1.0
asciendan = None pos : neg = 1.0 : 1.0
None
9.21083234
Die pos: neg Verhältnis kommt 1 heraus: 1 für alle Fälle . Wie kann ich das beheben? Ich dachte, das Problem in den folgenden Aussagen sein könnte, die ich zur Zeit im Code Kommentar gesetzt haben:
negids = conll2002.fileids('neg')
posids = conll2002.fileids('pos')
Der Fehler, dass ich, wenn ich die beiden oben genannten Aussagen nicht kommentieren Sie ist:
Traceback (most recent call last):
File "naive1.py", line 31, in <module>
x=train()
File "naive1.py", line 13, in train
negids = conll2002.fileids('neg')
TypeError: fileids() takes exactly 1 argument (2 given)
Ich habe versucht, mit Selbst, um dieses Problem zu beheben, aber es funktioniert immer noch nicht. Kann mir bitte jemand in die richtige Richtung zeigen? Danke im Voraus.
Danke, dass Sie darauf hingewiesen haben. Können Sie eine andere Möglichkeit vorschlagen, eine Sentimentanalyse für Tweets in niederländischer Sprache durchzuführen? Sollte ich Neural Network für das gleiche versuchen, indem ich eine Liste positiver Tweets und negativer Tweets habe, die als "gut" und "schlecht" klassifiziert sind, und dann das Modell darauf trainiere? Bitte schlagen Sie eine Alternative vor. –
Ich verstehe deine Frage nicht. Wenn Sie einen Sentiment-Korpus für Niederländisch haben (wie Sie zu sagen scheinen), können Sie ihn einfach dazu verwenden, einen 'NaivenBayesClassifier' zu trainieren, wie im Buch gezeigt. Wenn Sie kein Sentiment Corpus haben, wie wird ein anderer _supervised_ Algorithmus Ihnen helfen? – alexis
Im Moment habe ich eine Liste von 500 Texterklärungen in Niederländisch und ihre entsprechenden Bewertungen basierend auf ihren Gefühlen. Zum Beispiel hat ein positiver Tweet ein% Alter um 90 und ein negativer Tweet ein% Alter um 50. Kann ich das als Trainingsdatensatz für mein künstliches neurales Netzwerkmodell verwenden und trainieren, um den Sentiment Score für andere Tweets vorherzusagen? Deine Hilfe wird geschätzt. –