2017-05-10 4 views
0

Ich möchte nltk mit dem Korpus tweeter_sample trainieren, aber ich bekomme einen Fehler, wenn ich versuche, die Probe nach Kategorie zu laden.nltk Korpus Hochtöner_Probe nach Kategorie

Zuerst versuchte ich wie folgt aus:

from nltk.corpus import twitter_samples 

documents = [(list(twitter_samples.strings(fileid)), category) 
      for category in twitter_samples.categories() 
      for fileid in twitter_samples.fileids(category)] 

aber es gab mir diesen Fehler:

Traceback (most recent call last): 
    File "C:/Users/neptun/PycharmProjects/Thesis/First_sentimental.py", line 6, in <module> 
    for category in twitter_samples.categories() 
    File "C:\Users\neptun\AppData\Local\Programs\Python\Python36-32\lib\site-packages\nltk\corpus\util.py", line 119, in __getattr__ 
    return getattr(self, attr) 
AttributeError: 'TwitterCorpusReader' object has no attribute 'categories' 

Ich weiß nicht, wie sie die verfügbaren Attribute geben, um meine Liste zu haben, mit positive und negative Stimmung.

Antwort

2

Wenn Sie twitter_samples.fileids() untersuchen, werden Sie sehen, dass es getrennte positive und negative Dateien:

>>> twitter_samples.fileids() 
['negative_tweets.json', 'positive_tweets.json', 'tweets.20150430-223406.json'] 

So sind die Tweets als positiv oder negativ eingestuft werden, nur die entsprechende Datei auswählen. Es ist nicht die übliche Art und Weise die nltk behandelt kategorisierte Korpora, aber da haben Sie es.

documents = ([(t, "pos") for t in twitter_samples.strings("positive_tweets.json")] + 
      [(t, "neg") for t in twitter_samples.strings("negative_tweets.json")]) 

Dadurch erhalten Sie einen Datensatz von 10000 Tweets. Die dritte Datei enthält weitere 20000, die anscheinend nicht kategorisiert sind.

+0

Vielen Dank für Ihre Antwort @alexis, aber ich machte einen Fehler in meiner Frage Ich möchte, dass jedes Wort getrennt ist. So kann ich 'nltk.FreqDist (Dokumente)' verwenden – Cavalier

0
categorized_tweets = ([(t, "pos") for t in twitter_samples.strings("positive_tweets.json")] + 
          [(t, "neg") for t in twitter_samples.strings("negative_tweets.json")]) 


smilies = [':-)', ':)', ';)', ':o)', ':]', ':3', ':c)', ':>', '=]', '8)', '=)', ':}', 
    ':^)', ':-D', ':D', '8-D', '8D', 'x-D', 'xD', 'X-D', 'XD', '=-D', '=D', 
    '=-3', '=3', ':-))', ":'-)", ":')", ':*', ':^*', '>:P', ':-P', ':P', 'X-P', 
    'x-p', 'xp', 'XP', ':-p', ':p', '=p', ':-b', ':b', '>:)', '>;)', '>:-)', 
    '<3', ':L', ':-/', '>:/', ':S', '>:[', ':@', ':-(', ':[', ':-||', '=L', ':<', 
    ':-[', ':-<', '=\\', '=/', '>:(', ':(', '>.<', ":'-(", ":'(", ':\\', ':-c', 
    ':c', ':{', '>:\\', ';(', '(', ')', 'via'] 

categorized_tweets_tokens = [] 
for tweet in categorized_tweets: 
    text = tweet[0] 
    for smiley in smilies: 
     text = re.sub(re.escape(smiley), '', text) 
    categorized_tweets_tokens.append((word_tokenize(text), tweet[1])) 
Verwandte Themen