2013-03-10 128 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