在文本挖掘中使用嵌套字典

时间:2018-02-05 15:48:41

标签: python dictionary nested text-mining

我有一个嵌套字典,结构如下:

rules = 
 {'conjugation': {'v0': {'ending': 'cer'}},
 {'v1': {'ending': 'er'}},

...

} 

我想要做的是获取单词列表,找到所有结尾,并获得与该结尾相关联的ruleID。

我需要采取最严格的结局,例如,即使v1也适合,像“déplacer”这样的词也需要显示v0,因为v0的结尾更长。

有什么想法吗?谢谢

1 个答案:

答案 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')