2015-09-23 117 views
0

我有一個任務來計算inter-annotator agreementmulti-label classification,其中每個示例可以分配多個標籤。我發現NLTK可以測量基於距離度量的協議。NLTK協議與距離度量

我在找一個計算krippendorff alpha與MASI距離的例子。

這就是我所擁有的。

import nltk 
from nltk.metrics import masi_distance 


toy_data = [['1', 5723, [1,2]],['2', 5723, [2,3]]] 

task = nltk.metrics.agreement.AnnotationTask(data=toy_data, distance=masi_distance) 
print task.alpha() 

此代碼失敗,

TypeError: unhashable type: 'list' 

顯然,下列不工作。

toy_data = [['1', 5723, set([1,2])],['2', 5723, set([2,3])]] 

你有一個工作的例子嗎? 謝謝!

回答

0

我認爲數據應該是一個元組的列表,而不是(元組是可哈希,列表都沒有)列表的列表,請嘗試:

toy_data = [('1', 5723, (1,2)),('2', 5723, (2,3))] 

(我在做,而不是列出了值的元組太這可能是一個問題)

+0

它失敗,並帶有錯誤消息AttributeError:'元組'對象沒有屬性'交集',此外,它不只是元組,它可以多於兩個值。 – com

+0

錯誤信息表明由於某種原因,它需要一個'frozenset'。 – alexis

1

更確切地說,需要成爲一個冷凍集(就像@alexis指出的那樣)只是三元組的第三個成員,這是分配給該條目的標籤。

toy_data = [['1', 5723, frozenset(1,2)],['2', 5723, frozenset(2,3)]]