2015-05-19 6 views
5

Я использую nltk, но проблема, с которой я столкнулась, по-видимому, не связана с nltk. У меня есть модуль с именем util.tokenize, внутри которого есть некоторые классы и у меня есть следующие строки: перваяPython, ImportError: не может импортировать имя 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') 

Когда я называю эти классы из другого модуля, скажем, test.py все кажется для работы, но запуск модуля tokenize.py напрямую вызывает 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 

В чем может быть проблема? Почему он работает при вызове из других модулей?

test.py

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

Платформа для Windows.

+0

Добавлено больше частей соответствующего кода – CentAu

+0

Он даже не доходит до кода __main__. В первой строке она вызывает ошибку. Я добавил еще код. @grill – CentAu

+1

Что произойдет, если вы создадите новый .py-файл только с кодом, который вы указали выше (исключая эллипсы)? – grill

ответ

4

Мы установили, что это вызвано конфликтом пространства имен с nltk.tokenize и tokenize.py пользователя. После переименования tokenize.py все работало правильно.

Смежные вопросы