3
nltk.FreqDist('abc') > nltk.FreqDist('abd')
回报True
为什么NLTK中的FreqDist比较不对称?即 '>' 和 '<' 行为不同
和
nltk.FreqDist('abd') < nltk.FreqDist('abc')
回报False
背后有什么原因呢?这对我来说似乎有点奇怪。
nltk.FreqDist('abc') > nltk.FreqDist('abd')
回报True
为什么NLTK中的FreqDist比较不对称?即 '>' 和 '<' 行为不同
和
nltk.FreqDist('abd') < nltk.FreqDist('abc')
回报False
背后有什么原因呢?这对我来说似乎有点奇怪。
我看了一下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中打开一个错误报告。或者,如果你有时间,只需打开一个删除了这些东西的公关。
https://github.com/nltk/nltk/issues/1457 =) – alvas