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