我有两个来自同一文本的规范化双字母和三元组列表。
我需要的是一个三元组列表,前两个单词包含来自同一文本的二元组。例如,['spam eggs blabla']
应与[spam eggs]
匹配。有什么想法吗?
答案 0 :(得分:3)
您可以使用prefix tree (also known as trie)
以下是一个示例运行:
In [1]: import pygtrie
In [2]: pygtrie?
In [3]: trie = pygtrie.StringTrie()
In [4]: pygtrie.StringTrie?
In [5]: trie['/spam/egg'] = True
In [6]: trie['/foo/bar/baz'] = True
In [7]: trie.prefixes('/spam/egg/one')
Out[7]: <generator object Trie.prefixes at 0x7f18e91d9bf8>
In [8]: list(trie.prefixes('/spam/egg/one'))
Out[8]: [('/spam/egg', True)]
In [9]: list(trie.prefixes('/spam/egg/two'))
Out[9]: [('/spam/egg', True)]
In [10]: list(trie.prefixes('/spam/egg/three'))
Out[10]: [('/spam/egg', True)]
In [11]: list(trie.prefixes('/foo/bar/baz/python'))
Out[11]: [('/foo/bar/baz', True)]
答案 1 :(得分:2)
拆分你的trigrams
以选择前2和后两个单词(以防你想要分析。然后你可以进行比较,在高级别你可以尝试String Fuzzy Matching
100%
}匹配。首选数据结构我会说List
。列出上面两个包含trigrams
中2个单词的列表,然后执行匹配操作。例如:
li = ['spam eggs blabla']
li[0].split()[0:2]
output >> ['spam', 'eggs']
现在您可能想要转换为字符串
li1 = li[0].split()[0:2]
str1 = ' '.join(li1)
现在您对bigrams
执行类似操作并尝试进行比较。
供参考String Fuzzy Match
Here