我有以下列表,我希望获得相同但重新排列的双字母组合:
filtered_words = ['friends', 'friend, 'know', 'hate', 'love', 'you?', 'like', 'name?']
然后,当应用bigrams() - 函数时,采用以下方式:
list(bigrams(filtered_words))
我得到:'list' object is not callable.
我也尝试了list(bigrams([filtered_words]))
,结果相同。
答案 0 :(得分:0)
您可能会得到这个的一个原因是您使用保留名称bigrams
作为列表。例如,请参阅以下代码。
In [9]: bigrams = [bigram for bigram in bigrams(filtered_words)]
In [10]: bigrams(filtered_words)
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-10-32c8287373b9> in <module>()
----> 1 bigrams(filtered_words)
TypeError: 'list' object is not callable
这会产生冲突,因为导入bigrams
时没有引用其命名空间,然后被分配了另一个值,这会在程序再次被调用时混淆。当然,bigrams
现在是一个列表,这就是为什么将它作为函数调用会返回一个错误,该错误表示它不可调用。使用from nltk import *
之类时,这是一个常见错误。
此外,即使您导入整个命名空间,也避免将变量命名为与您正在使用或将要使用的函数相同的名称。这是糟糕的编程。
TLDR:正确导入命名空间或使用其他变量名称或只执行两者。以下应该可以正常工作。
In [11]: import nltk
In [12]: bigrams_list = [bigram for bigram in nltk.bigrams(filtered_words)]
In [13]: bigrams_list
Out[13]:
[('friends', 'friend'),
('friend', 'know'),
('know', 'hate'),
('hate', 'love'),
('love', 'you?'),
('you?', 'like'),
('like', 'name?')]