2016-01-22 9 views
2

Я пытаюсь использовать текстовый файл sentiwordnet «SentiWordNet_3.0.0_20130122.txt». Когда я импортировать sentiwordnet.py файл и пытается запустить его я получаю ошибку следующим образом:AttributeError: объект 'function' не имеет атрибута 'lower'

ошибка произошла, как:

--------------------------------------------------------------------------   AttributeError 
Traceback (most recent call last) 
<ipython-input-13-6e4eb476b4b2> in <module>() 
----> 1 happy = cv.senti_synsets('happy', 'a') 

C:\Users\Desktop\fp\sentiwordnet.pyc in  senti_synsets(self, string, pos) 
    65   synset_list = wn.synsets(string, pos) 
    66   for synset in synset_list: 
---> 67    sentis.append(self.senti_synset(synset.name)) 
    68   sentis = filter(lambda x : x, sentis) 
    69   return sentis 

C:\Users\Desktop\fp\sentiwordnet.pyc in senti_synset(self, *vals) 
    52    return SentiSynset(pos_score, neg_score, synset) 
    53   else: 
---> 54    synset = wn.synset(vals[0]) 
    55    pos = synset.pos 
    56    offset = synset.offset 

C:\Users\Anaconda2\lib\site-packages\nltk\corpus\reader\wordnet.pyc in synset(self, name) 
    1227  def synset(self, name): 
    1228   # split name into lemma, part of speech and synset number 
---> 1229   lemma, pos, synset_index_str = name.lower().rsplit('.', 2) 
    1230   synset_index = int(synset_index_str) - 1 
    1231 

AttributeError: 'function' object has no attribute 'lower' 

Мой код:

import sentiwordnet as snw 
SWN_FILENAME = "SentiWordNet_3.0.0_20130122.txt" 
cv = snw.SentiWordNetCorpusReader(SWN_FILENAME) 
happy = cv.senti_synsets('happy', 'a') 
print happy 
+2

На основании сообщения об ошибке «имя» в строке 1229 словаnet.pyc является функцией, когда она должна быть строкой. –

+0

Да, возможно, строка не передается методу senti_synsets, что может быть неправильным в коде, который запрещает его? Неужели CorpusReader не может прочитать файл? – Anonymous

+0

Возможно, попробуйте 'synset.name()' –

ответ

0

Могли бы вы ознакомьтесь с нижеследующим кодом:

import nltk.corpus.reader.sentiwordnet as snw 
SWN_FILENAME = "SentiWordNet_3.0.0_20130122.txt" 
cv = snw.SentiWordNetCorpusReader('', [SWN_FILENAME]) 
happy = cv.senti_synsets('happy', 'a') 
print(happy) 

Я думаю, что файл sentiwordnet.py, который вы используете, не соответствует t o пакет nltk, который вы установили. Я смог воспроизвести вашу ошибку, если бы использовал такую ​​несогласованную пару. В приведенном выше коде используется SentiWordNetCorpusReader, который поставляется с пакетом nltk (см. NLTK sources); однако конструктор для читателя хочет в качестве первого аргумента «root» (я не знаю nltk и не знаю, что это может быть ;-)), так как во втором он хочет список идентификаторов файлов (я думаю, они означают имена файлов, однако код кажется достаточно гибким, чтобы просто принять имя файла как строку).

Вы также можете использовать другую версию пакета nltk, которая соответствует вашему файлу sentiwordnet.py.

+0

Да! Понял. Я думаю, что импортирование sentiwordet из пакета nltk было бы лучшей идеей – Anonymous

+0

Проблема в том, что структура классов изменилась, как кажется. Используя версию пакета nltk, вы должны быть в безопасности (и, как кажется, использовать более новую версию). – Pachelbel