Python,ImportError: 无法导入名称 AbstractLazySequence

5
我正在使用nltk,但我面临的问题似乎与nltk无关。 我有一个名为util.tokenize的模块,在其中有一些类,第一行如下:

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。


它甚至没有到达__main__代码。在第一行就抛出错误。 我添加了更多的代码。@grill - CentAu
1
如果你创建一个新的 .py 文件,只包含你上面引用的代码(省略掉省略号),会发生什么? - grill
我将完全相同的代码复制到了“util”包之外的一个新模块中,可以直接运行而没有问题。但原始模块(“tokenize.py”)位于“util”包内,会抛出异常。因此,我猜测这与包命名有关。 - CentAu
1
尝试将包命名为不同的名称,看看会发生什么。我闻到了命名空间冲突的味道... - grill
1
我也在研究这个问题。我建议将它搬到聊天室 - MackM
显示剩余2条评论
1个回答

4

我们确定这是由于nltk.tokenize和用户的tokenize.py之间的命名空间冲突引起的。重命名tokenize.py后,一切正常。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接