今天在学习nltk自然语言处理时,发现一个问题,collocations()方法报错:
ValueError: too many values to unpack (expected 2)
根据报错检查源码,发现原因是collocations()方法调用了collocation_list()方法, 而collocation_list()方法的返回值是一个普通的列表,无法用
for w1,w2 in...
这种语法。继续观察发现collocation_list()使用了一个内部变量_collocations来作为中间值。查看该变量发现,该变量是一个元组列表:
问题就出在这了。查看text.py可以发现collocations()方法就是将collocation_list()方法的返回值改了个形式。
目前的解决方法如下(参考github上的,看样子这个bug存在有一段时间了,链接:https://github.com/nltk/nltk/issues/2299):
1.可以暂时不使用collocations()方法,用collocation_list()。反正区别也不大……
2.如果非要使用,可以修改text.py文件,大概在443行(个人觉得修改源码不太建议……我是菜鸡)
old code:
collocation_strings = [w1 + ' ' + w2 for w1, w2 in self.collocation_list(num, window_size)]*
print(tokenwrap(collocation_strings, separator="; "))
new code:
print(tokenwrap(self.collocation_list(), separator="; "))
3.使用如下方式实现同样的功能(其实就是把上面的直接加入自己的代码里,个人感觉这样比较好)
from nltk.util import tokenwrap
print(tokenwrap(text.collocation_list(), separator="; "))
文章写于2019-08-25,nltk版本3.4.5。python版本3.6。原创,转载请注明出处。