from gensim.sklearn_api.phrases import PhrasesTransformer
# Create the model. Make sure no term is ignored and combinations seen 3+ times are captured.
m = PhrasesTransformer(min_count=1, threshold=3)
text = [['I', 'love', 'computer', 'science', 'computer', 'science', 'is', 'my', 'passion', 'I', 'studied', 'computer', 'science']]
# Use sklearn fit_transform to see the transformation.
# Since computer and science were seen together 3+ times they are considered a phrase.
m.fit_transform(text)
上面的代码确实按照预期返回了computer_science。但是,什么是正确的提取短语的方法呢?
该 PhrasesTransformer
封装了一个gensim的 Phrases
模型,它做了实际的共现统计编制&;将大词组推广到短语。
遗憾的是,该 Phrases
对象不会,至少通过 gensim-3.8.3
(2020年4月),提供它可以发出的所有短语的任何清单。从本质上讲,它只是编译统计,然后当呈现的是 新的 文本,检查哪些大梁应该被合并(根据其当前的统计& 参数)。
这种方法的缺点包括
这种方法的优点包括:
要真正得到一个短语的列表,a Phrases
实例可以创建,你需要给它输入所有潜在的短语文本,看看它能推广什么。这可能应该是gensim上的一个实用方法。Phrases
- 因为类似的枚举已经在相关的 Phraser
类初始化--但不是。这样的方法大致可以这样工作(这可能有bug,因为我没有测试过)。
from gensim.models.phrases import pseudocorpus
def report_all_phrases(phrases_model):
corpus = pseudocorpus(phrases_model.vocab, phrases_model.delimiter, phrases_model.common_terms)
phrasegrams = set()
for bigram, score in phrases_model.export_phrases(corpus, self.delimiter, as_tuples=True):
phrasegrams.add(bigram)
return phrasegrams