2017-12-01 20 views
0

私は、そのpaulryan.txtファイルの各行がどのように正または負であるかを示すプログラムを作成しようとしています。私はopinion_lexiconを使用しています。ファイルは '_io.TextIOWrapper'ですPython .wordsの問題?

.wordsの代わりに使用できるものはありますか?

その他のあまり重要でない問題:私の全部のpaulryan.txtファイルを行単位でトークン化したまま小文字にする方法はありますか? opinion_lexiconに小文字の単語しかないので、私が全体を小文字にしないと、正確な正または負のスコアが得られません。

import nltk 
from nltk.corpus import opinion_lexicon 
from nltk.tokenize.simple import (LineTokenizer, line_tokenize) 

poswords = set(opinion_lexicon.words("positive-words.txt")) 
negwords = set(opinion_lexicon.words("negative-words.txt")) 


f=open("paulryan.txt", "rU") 
raw = f.read() 
token= nltk.line_tokenize(raw) 

print(token) 

def finddemons(): 
    for x in token: 
     y = token.words() 
     percpos = len([w for w in token if w in poswords ])/len(y) 
     percneg = len([w for w in token if w in negwords ])/len(y) 
     print(x, "pos:", round(percpos, 3), "neg:", round(percneg, 3)) 

finddemons() 

Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "<stdin>", line 3, in finddemons 
AttributeError: 'list' object has no attribute 'words' 
+0

あなたはNLTKとの 'spacy'インタフェースを混乱させるようです。=' nltk import word_tokenize;を試してください。 y = word_tokenize(トークン) ' – alvas

+0

Hmmm。さて、私はそれを試みましたが、それはすべてを1つの大きなものにマージしました。:/行ごとに分ける必要があります。 – rlavalla

答えて

0

ファイルを1行ずつ読むことをお勧めします。その後、使用word_トークン化:

for line in f: 
    tokens = word_tokenize(line) 

あなたは辞書で検索用のテキストを小文字について正しいです:

for line in f: 
    tokens = word_tokenize(line.lower()) 

意見の辞書があるので、あなたも、WordNetのを使用してトークンをlemmatizeしようとすることができその豊かな語彙ではありません。特に単語が異なる形をしているつぶやきを使用する場合は特にそうです。