2016-07-06 44 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

相關問題