2013-03-10 37 views
0

我很努力與匹配一個3字的句子與一個二字的digram字典,它計數(第一個字和第二個字)和(第二個字和第三個字的頻率)。我想要的是如何匹配的字符串(AAA BBB CCC)是在雙精度和(AAA BBB)有一個計數和(BBB CCC)有一個計數,然後我們採取最大?Python,匹配bigram字典與文本

Counter({ 
('BBB', 'DDD'): 3, 
('AAA', 'BBB'): 2, 
('DDD', 'XXX'): 1, 
('DDD', 'YYY'): 1, 
('YYY', 'BBB'): 1, 
('BBB', 'CCC'): 1, 
('CCC', 'AAA'): 1, 
('XXX', 'BBB'): 1}) 
+0

plase解釋你的字典中的鍵的樣子,以及3個字序列的類型....他們是字符串還是元組或什麼? – 2013-03-10 01:48:56

+0

你能解釋一下你想做什麼嗎?我不認爲有一種通用的方法可以知道「AAA BBB CCC」是否出現在僅給出雙字典的語料庫中。 – Blckknght 2013-03-10 01:57:27

+0

如果我有一個句子(AAA BBB CCC)和字典的雙字節頻率。我想比較一下,如果bigram(AAA,BBB)> bigram(BBB,CCC)那麼這個句子就是括號,否則它就是正確的括號。 – Peace 2013-03-10 02:37:58

回答

0

它應該是非常簡單的查詢您的兩個二元語法,使您的三個詞的句子,並比較它們計數器。這裏有一種方法:

def find_sentence_bracketing(sentence, bigram_dict): 
    left = sentence[0:2] 
    right = sentence[1:3] 
    if bigram_dict[left] > bigram_dict[right]: 
     return "left bracketing" 
    else: 
     return "right bracketing" 

當然你也可以做的比返回一個字符串以外的東西,這只是爲了演示的基本理念。

代碼的重要組成部分是元組切片,它產生leftright bigram元組,然後可以用它來索引字典。

+0

如果任一鍵不在字典中或兩者都不是? – Kenosis 2013-03-10 03:49:15

+0

@Kenosis:一個'Counter'實例(來自'collections'模塊)對於不存在的鍵將總是返回零,所以如果字典與問題中的一樣,那麼就沒有問題了。 – Blckknght 2013-03-10 04:09:37