Python 比较同一文本中的bigram和trigram
我有两个来自同一个文本的标准化的二元图和三元图列表。Python 比较同一文本中的bigram和trigram,python,list,nlp,nltk,Python,List,Nlp,Nltk,我有两个来自同一个文本的标准化的二元图和三元图列表。 我需要的是一个三角形列表,它的前两个单词包含来自同一文本的一个二元形。例如,['spam egs blabla']应该与[spam egs]匹配。有什么想法吗?拆分您的三叉图,选择前两个单词和后两个单词(以防万一你想分析。然后你可以做比较,在高层你可以尝试字符串模糊匹配进行100%匹配。首选的数据结构我会说List。列出上面两个列表,其中包含三角形中的两个单词,然后执行匹配操作。例如: li = ['spam eggs blabla'] li
我需要的是一个三角形列表,它的前两个单词包含来自同一文本的一个二元形。例如,
['spam egs blabla']
应该与[spam egs]
匹配。有什么想法吗?拆分您的三叉图
,选择前两个单词和后两个单词(以防万一你想分析。然后你可以做比较,在高层你可以尝试字符串模糊匹配
进行100%
匹配。首选的数据结构我会说List
。列出上面两个列表,其中包含三角形中的两个单词,然后执行匹配操作。例如:
li = ['spam eggs blabla']
li[0].split()[0:2]
output >> ['spam', 'eggs']
现在您可能需要转换为字符串
li1 = li[0].split()[0:2]
str1 = ' '.join(li1)
现在,您可以对bigrams
执行类似的操作,并尝试进行比较
参考字符串模糊匹配
拆分您的三叉图
以选择前两个单词和后两个单词(以防万一你想分析。然后你可以做比较,在高层你可以尝试字符串模糊匹配
进行100%
匹配。首选的数据结构我会说List
。列出上面两个列表,其中包含三角形中的两个单词,然后执行匹配操作。例如:
li = ['spam eggs blabla']
li[0].split()[0:2]
output >> ['spam', 'eggs']
现在您可能需要转换为字符串
li1 = li[0].split()[0:2]
str1 = ' '.join(li1)
现在,您可以对bigrams
执行类似的操作,并尝试进行比较
作为参考,您可以使用
下面是一个运行示例:
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]中的:导入pygtrie
在[2]:皮格特里?
在[3]中:trie=pygtrie.StringTrie()
在[4]:pygtrie.StringTrie?
在[5]中:trie['/spam/egg']=True
在[6]中:trie['/foo/bar/baz']=True
[7]中:trie.前缀('/spam/egg/one')
出[7]:
在[8]中:列表(trie.前缀('/spam/egg/one'))
Out[8]:[('/spam/egg',True)]
在[9]中:列表(trie.前缀('/spam/egg/two'))
Out[9]:[('/spam/egg',True)]
在[10]中:列表(trie.前缀('/spam/egg/three'))
Out[10]:[('/spam/egg',True)]
在[11]中:列表(trie.前缀('/foo/bar/baz/python'))
Out[11]:[('/foo/bar/baz',True)]
您可以使用
下面是一个运行示例:
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]中的:导入pygtrie
在[2]:皮格特里?
在[3]中:trie=pygtrie.StringTrie()
在[4]:pygtrie.StringTrie?
在[5]中:trie['/spam/egg']=True
在[6]中:trie['/foo/bar/baz']=True
[7]中:trie.前缀('/spam/egg/one')
出[7]:
在[8]中:列表(trie.前缀('/spam/egg/one'))
Out[8]:[('/spam/egg',True)]
在[9]中:列表(trie.前缀('/spam/egg/two'))
Out[9]:[('/spam/egg',True)]
在[10]中:列表(trie.前缀('/spam/egg/three'))
Out[10]:[('/spam/egg',True)]
在[11]中:列表(trie.前缀('/foo/bar/baz/python'))
Out[11]:[('/foo/bar/baz',True)]
Hey@Alex Nitikin,需要澄清的是:您有两个列表,一个是二元图,另一个是三元图。您正在寻找三元图列表的子列表,以便每个元素在二元图列表中都包含一个二元图,对吗?@Peter Dolan感谢您的回答。三元图的前两个元素应该包含与二元图完全匹配的元素。Hey@AlexNikitin,没问题。是bigrams/trigrams字符串还是列表本身?一个trigram看起来像['Hello','there','sir']
还是['Hello there sir']
?我不喜欢这个想法,但如果你考虑到ngram的相似性,一个简单的方法是使用BLEU。嘿@Alex Nitikin,我想说清楚:你有两个列表,一个是双元图,一个是三元图。你在寻找三元图列表的子列表,这样每个元素在双元图列表中也包含一个双元图,对吗?@Peter Dolan谢谢请回答。三角形的前两个元素应该包含与bigrams完全匹配的元素。嘿@AlexNikitin,没问题。bigrams/trigrams是字符串还是列表?三角形看起来像['Hello'、'there'、'sir']
还是['Hello there sir']
?我不喜欢这个想法,但如果你考虑到ngram的相似性,一个简单的方法是使用BLEU。谢谢!你能建议我如何将一个三角形列表拆分为单词的子列表吗?@AlexNikitin补充道,我希望这有帮助。谢谢!你能建议我如何将一个三角形列表拆分为单词的子列表吗?@AlexNikitin补充道,我希望这有帮助。s应将/
用作分隔符,以便在trie中插入和同时插入密钥或密钥片以代替空格。您可以将空格用作分隔符应将/
用作分隔符,以便在trie中插入和同时插入密钥或密钥片以代替空格。您可以将空格用作分隔符