我有一个嵌套字典,结构如下:
rules =
{'conjugation': {'v0': {'ending': 'cer'}},
{'v1': {'ending': 'er'}},
...
}
我想要做的是获取单词列表,找到所有结尾,并获得与该结尾相关联的ruleID。
我需要采取最严格的结局,例如,即使v1也适合,像“déplacer”这样的词也需要显示v0,因为v0的结尾更长。
有什么想法吗?谢谢
答案 0 :(得分:0)
您可以使用trie,然后得分,然后按匹配键的长度对结果进行评分。
首先使用后缀的反向字符串索引 conjugation :
In [1]: import pygtrie
In [2]: trie = pygtrie.CharTrie()
In [3]: trie['re'] = 'v0'
In [4]: trie['rec'] = 'v1'
然后您可以使用以下代码查询共轭:
In [22]: list(trie.prefixes(''.join(reversed('aimer'))))
Out[22]: [('re', 'v0')]
In [23]: list(trie.prefixes(''.join(reversed('balancer'))))
Out[23]: [('re', 'v0'), ('rec', 'v1')]
然后你可以使用这样一个简单的函数对结果进行评分:
In [24]: best = lambda candidates: sorted(candidates, key=lambda x: len(x[0]), reverse=True)[0]
In [25]: best(trie.prefixes(''.join(reversed('balancer'))))
Out[25]: ('rec', 'v1')