2017-02-08 10 views
1

Я использую следующий метод, но он всегда бросает мне неверный файл:Читайте в Гутенберг тексте из NLTK

import nltk 

затем

file=open(nltk.corpus.gutenberg.words('austen-persuasion.txt'),"r").read().split().lower() 
wordcount={} 

for word in file: 
    if word not in wordcount: 
     wordcount[word] = 1 
    else: 
     wordcount[word] += 1 
print ("The frequency of each word in the text file is as follows :") 
for k,v in wordcount.items(): 
    print (k, v) 

Ошибка заключается в следующем

TypeError         Traceback (most recent call last) 
<ipython-input-88-de499228f7ab> in <module>() 
    1 import nltk 
----> 2 file=open(nltk.corpus.gutenberg.words('austen-persuasion.txt'),'r').read().split() 
    3 #file = nltk.corpus.gutenberg.words('austen-persuasion.txt') 
    4 wordcount={} 
    5 

TypeError: invalid file: ['[', 'Persuasion', 'by', 'Jane', 'Austen', '1818', ...] 
+0

Вам не нужно разделять() прочитанный файл, функциональность ntkl делает это для вас – patito

ответ

0

Как упоминалось в комментарии @patito, вам не нужно использовать read, и вам также не нужно использовать split, так как nltk читает его в виде списка слов. Вы можете видеть, что для себя:

>>> file = nltk.corpus.gutenberg.words('austen-persuasion.txt') 
>>> file[0:10] 
[u'[', u'Persuasion', u'by', u'Jane', u'Austen', u'1818', u']', u'Chapter', u'1', u'Sir'] 

Вам также нужно исправить вмятины на количество слов, но в противном случае он будет работать для вас.

+0

отступы отлично, но тогда я не могу использовать .lower() в файле, чтобы скрывать все тексты в нижнем регистре. –

+0

Просто воспользуйтесь списком: 'file = [word.lower() для слова в файле]'. И отступ, когда вы вставили его выше, не сработает - вам нужно отступить после 'для слова в файле:' – Tchotchke

+0

Спасибо, Это сработало отлично. Извините, что я вставил код с неправильными отступами здесь. –