2015-05-19 20 views
5

Sto usando nltk ma il problema che sto affrontando non sembra essere correlato specificamente a nltk. ho un modulo chiamato util.tokenize al cui interno vi sono alcune classi e ho la seguente prima riga:Python, ImportError: impossibile importare il nome AbstractLazySequence

util/tokenizer.py

from nltk.tokenize.regexp import RegexpTokenizer 
... 

class SentTokenizer(object): 
    def __init__(self, stem=False, pattern='[^\w\-\']+'): 
     self.alg = RegexpTokenizer(pattern, gaps=True) 

    def __call__(self, text): 
     return self.alg.tokenize(text) 
    .... 

if __name__ == '__main__': 
    s_t = SentTokenizer() 
    s_t('blah blah') 

Quando chiamo quelle classi da un altro modulo, diciamo test.py tutto sembra per funzionare, ma l'esecuzione del modulo tokenize.py causa direttamente ImportError.

File "tokenize.py", line 1, in <module> 
...  
File "Python27\lib\site-packages\nltk\corpus\reader\util.py", line 28, in <module> 
     from nltk.util import AbstractLazySequence, LazySubsequence, LazyConcatenation, py25 
    ImportError: cannot import name AbstractLazySequence 

Quale potrebbe essere il problema? Perché funziona quando chiamato da altri moduli?

test.py

from util.tokenize import SentTokenizer 
s_t = SentTokenizer() 
print s_t('blah blah') 

piattaforma è Windows.

+0

Aggiunte ulteriori parti del codice rilevante – CentAu

+0

Non arriva nemmeno al codice __main__. Alla prima riga genera un errore. Ho aggiunto altro codice. @grill – CentAu

+1

Cosa succede se crei un nuovo file .py con solo il codice che hai incluso sopra (ad eccezione di ellissi)? – grill

risposta

4

Abbiamo determinato che questo è stato causato da un conflitto di namespace con nltk.tokenize e tokenize.py dell'utente. Dopo aver rinominato tokenize.py, tutto ha funzionato correttamente.

Problemi correlati