Gensim是否有一种方法可以严格生成单词列表中的双字母组,三字母组?
我可以成功地生成双字母组,双字母组,三字母组,但我只想提取双字母组,三字母组。
例如,在下面的列表中:
words = [['the', 'mayor', 'of', 'new', 'york', 'was', 'there'],["i","love","new","york"],["new","york","is","great"]]
我使用
bigram = gensim.models.Phrases(words, min_count=1, threshold=1)
bigram_mod = gensim.models.phrases.Phraser(bigram)
words_bigram = [bigram_mod[doc] for doc in words]
这将按如下所示创建一个字母组合和双字母组的列表:
[['the', 'mayor', 'of', 'new_york', 'was', 'there'],
['i', 'love', 'new_york'],
['new_york', 'is', 'great']]
我的问题是,有没有一种方法(除了正则表达式之外)严格地提取双字母组,因此在此示例中仅会产生“ new_york”?
这不是gensim Phrases
功能的内置选项。
[如果我们可以假设原始的字母组合中都没有'_'
字符,那么只选择带有'_'
的标记的步骤就不会太昂贵(并且不需要完整的正则表达式)。例如,您的最后一行可能是:
words_bigram = [ [token for token in bigram_mod[doc] if '_' in token] for doc in words ]
((如果出于某些原因,您的会标中有下划线,并且您不希望那些与Phrases
组合的双字母组合混淆的字符,可以更改连接字符。]
如果这些都不够好,您可能会看到gensim中的代码,该代码实际上对unigram进行评分并将其组合成双字母组...
...,并使用您额外需要的选项扩展该模块,或者在您自己的代码中模拟其在类之外的行为。