我正在使用正则表达式来查找与计数器的键对应的字符串,并且我试图使用包含其中一个字符串的变量来访问此计数器。它与键相同,但是当我直接使用变量而不是键时,计数返回整数等于零。例如,变量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
是一个包含所有ngrams概率的计数器,格式为bigram ('word2', 'word3')
。我试图在joint_probas
中的每个条目中查找第二项的单一概率来计算条件概率。
谢谢
答案 0 :(得分:0)
你还没有给出probas
的数据结构,所以我只能猜测它是一个成员,它是一个字典列表,其中的键是元组,如下所示:
>>> class Foo:
>>> ngrams = [ { ('word2', 'word3') : 11 }, { ('word2', 'word3') : 12 }, { ('word2', 'word3') : 13 } ]
>>> probas = Foo()
定义tuple类型的键及其字符串版本:
>>> key = ('word2','word3')
>>> type(key)
<type 'tuple'>
>>> strKey = str(key)
>>> type(strKey)
<type 'str'>
然后:
>>> probas.ngrams[2][key]
13
>>> probas.ngrams[2][strKey]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: "('word2', 'word3')"
我怀疑这是你的问题,因为在正则表达式之后,ngram_b将是一个字符串,并且你正在使用它来查找一个元组的键。不过没有一个完整的例子就无法确定,顺便说一句,这会节省每个人的时间。