python - 如何仅生成二元/三元语料库
问题描述
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]
这将创建一个 unigrams 和 bigrams 列表,如下所示:
[['the', 'mayor', 'of', 'new_york', 'was', 'there'],
['i', 'love', 'new_york'],
['new_york', 'is', 'great']]
我的问题是,有没有办法(除了正则表达式)来严格提取二元组,所以在这个例子中只有“new_york”会是结果?
解决方案
Phrases
它不是 gensim功能的内置选项。
如果我们可以假设您的原始 unigrams 中没有一个'_'
字符,那么仅选择带有 a 的标记的步骤'_'
不应该太昂贵(并且不需要完整的正则表达式)。例如,您的最后一行可能是:
words_bigram = [ [token for token in bigram_mod[doc] if '_' in token] for doc in words ]
(如果由于某种原因你的一元组中有下划线,你可以改变加入字符,并且你不希望那些与 - 组合的二元组混淆Phrases
。)
如果这些都不够好,您可能会查看 gensim 中的代码,该代码实际上得分并将 unigrams 组合成 bigrams ......
...并使用您额外需要的选项扩展该模块,或者在您自己的代码中模仿其在类之外的行为。
推荐阅读
- python - 如何使用python删除单词中的空格?
- reactjs - 如何为 React 道具定义 TypeScript 类型,其中仅当道具 A 传递给组件时才接受道具 B?
- javascript - 从Vue js通过axios调用谷歌地图海拔api时如何修复跨域读取阻塞?
- excel - 如何理解没有类型声明的“Dim a, b”?
- excel - 将查询从 Access 导入 PowerQuery
- python-3.x - 如何检查 pandas.core.series.Series 中 index.values 的位置
- python - Python 2.7:使用正则表达式匹配表达式
- javascript - 是否可以在不使用 .arc() 或任何其他 HTML 标签的情况下制作圆圈?
- c# - 我试图将我在 C# 中的加密转换为 PHP
- opencv - 在 Canny 边缘检测后查找个人 ID 轮廓 - OpenCV 4.0 + Python