nltk.FreqDist('abc') > nltk.FreqDist('abd')
返回True
和
nltk.FreqDist('abd') < nltk.FreqDist('abc')
返回False
这背后的原因是什么?这对我来说似乎有点奇怪。
答案 0 :(得分: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打开错误报告。或者,如果你有时间,只需打开公关,删除这些东西。