【发布时间】:2018-06-13 18:59:55
【问题描述】:
我正在使用正则表达式来查找与计数器键对应的字符串,并且我正在尝试使用包含这些字符串之一的变量来访问此计数器。它与键相同,但是当我直接使用变量而不是键时,计数返回一个 integer 等于零。例如,变量ngram_b 包含字符串('long,'),它是我计数器中的一个键。使用下面的代码,proba_b 将等于零,我得到除以零错误,但 proba_b = probas.ngrams[order][('long,')] 返回正确答案 0.006.
for ngram, count in joint_probas.items():
ngram_b = re.search(r'(?<=\), ).*\)(?=\))',str(ngram),re.DOTALL)
ngram_b= ngram_b.group(0)
order = int(ngram_b.count('\'')/2)
proba_b = probas.ngrams[order][ngram_b]
if proba_b == 0 :
print(ngram_b, order)
proba_joint = joint_probas[ngram]
condi_prob[ngram] = proba_joint / proba_b
这对我来说真的很奇怪,关于字典的工作原理,我一定有什么不明白的地方,希望有人能看到我缺少的东西。
编辑:Joint_probas 是一个计数器,包含两个 ngram 的联合概率,键的格式(对于一个带有二元语法的一元语法):(('word1',), ('word2', 'word3'))。 Probas 是一个计数器,包含所有 ngram 的概率,格式为 ('word2', 'word3') 为一个二元组。我试图在joint_probas 的每个条目中查找第二项的单一概率以计算条件概率。
谢谢
【问题讨论】:
-
很难从你的例子中看出,因为joint_probas和probas没有定义,但是如果你看到字符串('long,')可能是一个包含字符串而不是包含括号。您应该将示例更新为人们可以运行而无需猜测某些字典的输入数据或值的示例。
-
Joint_probas是一个计数器,包含两个 ngram 的联合概率,键的格式(对于一个带有一个二元的一元):(('word1',), ('word2', 'word3'))。Probas是一个计数器,包含所有 ngram 的概率,格式为('word2', 'word3')用于二元组。我正在尝试在joint_probas的每个条目中查找第二项的单一概率以计算条件概率。 -
将
'long,'包裹在括号中似乎是多余的,因为type(('long,'))产生str。不是元组,因为它没有尾随逗号。关于丢失的输入数据似乎仍然有点不清楚,因为您的Joint_probas看起来像一个元组的元组,而Probas是一个单一的元组,而不是字典。能给我们Joint_probas的字典结构吗? -
我认为我的问题来自于我假设字典中的键是简单字符串的事实。难道它们仍然是元组,我正在尝试访问一个键,它是一个具有相同字符串的元组。
标签: python dictionary counter