比较同一文本中的双字母和三字母

时间:2018-04-04 18:54:35

标签: python list nlp nltk

我有两个来自同一文本的规范化双字母和三元组列表。 我需要的是一个三元组列表,前两个单词包含来自同一文本的二元组。例如,['spam eggs blabla']应与[spam eggs]匹配。有什么想法吗?

2 个答案:

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