2016-07-06 43 views

回答

2

我看了一下FreqDist类的比较方法,发现它们都是基于一种方法:__le__。只是想说明,这意味着什么,因为这个设置:

>>> abc = nltk.FreqDist('abc') 
>>> abd = nltk.FreqDist('abd') 

这两个语句是等价的:

>>> abc < abd 
False 
>>> abc.__le__(abd) 
False 

现在,这个方法做的第一件事是检查第一FreqDist的按键是否是一个第二个键的子集。在你的例子中,这总是False,这就是这个方法返回的结果。

但是,>运算符会触发要运行的__gt__方法,该方法被写入以返回__le__的否定。因此,你得到了True

说实话,我不知道为什么比较方法被添加到FreqDist。其母公司Counter不支持比较,我怀疑这正是因为它不是微不足道的(至少可以说)提出一个很好的解决方案。我有一个预感,这段代码是从FreqDist没有继承Counter的日子和一些过分热心的OOP粉丝决定这个班级需要支持比较的遗物。我个人很难想出一个可能有用的情况。

如果我是你,我会在NLTK's issue tracker中打开一个错误报告。或者,如果你有时间,只需打开一个删除了这些东西的公关。

+0

https://github.com/nltk/nltk/issues/1457 =) – alvas

相关问题