获得字典

时间:2015-10-18 21:42:57

标签: python string dictionary nlp

我有一个字典字母

letterstoProbabilityMap={"aaa":0.4,"bbb":0.7,"ccc":01}

我有三个字母字符串及其发生的可能性(我缩短了字典)。 我根据一些训练数据分配这些概率。但我也想为一些我没见过的字符串/键分配一个概率。例如“aaa”。 因为我的所有键都在set aaa-zzz中。 有没有快速的方法让我获得非分配/补充并快速分配值。 (我知道我的问题很抽象。)

修改 该值不固定,实际上是一个位置概率。 下面是我用来计算我所知道的概率的代码片段 关键是我保留一个概率质量,然后我将分配给我没有看到的三个字母的字符串(因为我知道所有字符串都在aaa-zzz之间)

for trigram in sorted(threeletter_counts.keys()):
        numerator=threeletter_counts[trigram]+1 
        denominator=twoletter_counts[trigram[:2]]+30
        prob=numerator/denominator

1 个答案:

答案 0 :(得分:3)

您可以浏览所有字符串并使用setdefault

for letters in itertools.product(string.ascii_lowercase, repeat=3):
    letterstoProbabilityMap.setdefault(''.join(letters),
                                       computeMissingProbability(letters))

虽然如果计算费用昂贵并且经常浪费,因为大多数密钥已经存在,最好先检查一下:

for letters in itertools.product(string.ascii_lowercase, repeat=3):
    key = ''.join(letters)
    if key not in letterstoProbabilityMap:
        letterstoProbabilityMap[key] = computeMissingProbability(letters)

或者如果适用于您,可以使用defaultdict

fullMap = collections.defaultdict(lambda: 0.123, letterstoProbabilityMap)

如果默认值仅为0.0:

fullMap = collections.defaultdict(float, letterstoProbabilityMap)