2015-08-28 63 views
0

我想要構建一個與共生矩陣相似的距離矩陣(稀疏矩陣)。在一個大小爲7的窗口中,我想計算兩個特定單詞之間的距離並輪流移動窗口。計算Python中窗口中單詞之間的距離

藉此例如:

無政府主義/名詞NIL NIL NIL術語/名詞NIL濫用/名詞NIL NIL NIL NIL工作/名詞類別/名詞自由基/名詞

這是什麼我有名詞,我用「NIL」(只是表示距離)替換非相關詞並保留名詞和形容詞。我想計算(術語,濫用),(工作,階級),(工作,部首),(階級,部首)之間的距離。其他距離不計算,因爲他們是在窗口大小7.

而且我想要得到稀疏矩陣等這樣的矩陣記錄:

i  j  dis 
1 term abuse 2 
2 working class 1 
3 working radicals 2 
4 class radicals 1 

有一些有效的方式做到這在Python中,我的語料庫大小可能是10G +。

非常感謝!

回答

1

所以基本上,你想得到7或更少的距離。你可以通過這個過程(僞)輕鬆地做到這一點:

for each word index: 
    skip if word[index] is NIL 
    for offset from 1 to 7: 
    stop if index+offset is past last element 
    skip if word[index+offset] is NIL 
    make triplet (word[index], word[index+offset], offset) 

它應該很容易餡入scipy sparse matrix(你還需要指定每個離散字的ID,如SciPy的矩陣指數必須爲整數)。

編輯:不知道爲什麼我把6在那裏......當然應該是7

+0

是的,我想要這樣做。對可能的誤解抱歉。如果index + offset是最後一個元素,「停止」是什麼意思?而且,我認爲這是一個O(n^2)算法,對吧?我們可以加快速度嗎? –

+0

我的意思是,你不想'word [index + offset]'給你一個例外,所以你打破了內部循環。它不是O(n^2),它是O(7n),與O(n)相同。 – Amadan

+0

謝謝@Amadan!我已經做到了!也使用scipy轉換稀疏矩陣。 –