2014-09-13 4 views
10

Jestem początkujący w Pythonie i NLTK. Próbuję uruchomić następujący kod z samouczka:AttributeError: Obiekt "FreqDist" nie ma atrybutu "inc"

from nltk.corpus import gutenberg 
from nltk import FreqDist 

fd = FreqDist() 

for word in gutenberg.words('austen-sense.txt'): 
    fd.inc(word) 

Jeśli uruchomię to pojawia się następujący błąd:

AttributeError: 'FreqDist' object has no attribute 'inc' 

Każdy pomysł co robię źle?

Odpowiedz

15

Należy to zrobić w taki sposób:

fd[word] += 1 

Ale zwykle FreqDist służy tak:

fd = FreqDist(my_text) 

także spojrzeć na przykłady tutaj:

http://www.nltk.org/book/ch01.html

+0

Dziękujemy .... To działało. – user2763487

+0

Istnieje strona wiki, https://github.com/nltk/nltk/wiki/Porting-your-code-to-NLTK-3.0, wymieniająca zmiany interfejsu – user799188

0

Najnowsza wersja nltk nie zawiera znaku inc. Zamiast tego użyłem aktualizacji.

from nltk.corpus import gutenberg 
from nltk import FreqDist 

fd = FreqDist() 

for word in gutenberg.words('austen-sense.txt'): 
    fd.update([word]) 

Aktualizacja zajmuje element iterowalny. Dlatego upewnij się, że przekazujesz element iteracji w funkcji aktualizacji.

1

Dla osób szukających jak zmienić przykład książki do NLTK 3,0:

import nltk 
from nltk.corpus import brown 

suffix_fdist = nltk.FreqDist() 
for word in brown.words(): 
    word = word.lower() 
    suffix_fdist[word[-1:]] +=1 
    suffix_fdist[word[-2:]] +=1 
    suffix_fdist[word[-3:]] +=1 
common_suffixes = [] 
for suffix in suffix_fdist.most_common(100): 
    common_suffixes.append(str(suffix.__getitem__(0))) 
print common_suffixes