给定一个可以由一个、两个甚至三个单词组成的预定义术语列表,问题是如何在一组具有自由词汇表(即许多单词)的文档中计算它们的出现次数。你知道吗
terms= [
[t1],
[t2, t3],
[t4, t5, t6],
[t7],...]
本条款需要确认的文件格式如下:
docs = [
[w1, w2, t1, w3, w4, t7], #d1
[w1, w4, t4, t5, t6, wi, ...], #d2
[wj, t7, ..] ..] #d3
所需输出应为
[2, 1, 1, ...]
也就是说,第一个doc有两个感兴趣的术语,第二个doc有1(由三个单词组成),依此类推。你知道吗
如果术语需要计算其中1个单词的长度,那么我可以很容易地按字母顺序排列每个文档,删除重复的术语(set),然后与大小为1个单词的术语相交。计算重复的单词就是搜索结果。你知道吗
但是对于长度这两个术语>;=2,事情就变得棘手了。你知道吗
我一直在使用gensim来形成一个单词包,并在使用新短语时检测索引
例如
dict_terms = corpora.Dictionary(phrases)
sentence = unseen_docs[0]
idxs = dict_terms[sentence]
然后计算这些指数,如果指数是连续的,那就意味着只看到了一个项,而不是其中的2到3个。你知道吗
任何建议。你知道吗
在Scikit learn(一个非常流行的机器学习Python包)中,有一个模块,它完全满足您的要求:
以下是操作方法:
首先安装sklearn
现在代码是:
输出是一个大小为m x n的矩阵,例如:
列表示单词,行表示文档。所以对于每一行,你都有一个单词包。你知道吗
但是如何检索出现在哪里的单词呢?您可以使用以下方法获取每个“列”名称:
你会得到一个单词列表(单词按字母顺序排列)。你知道吗
现在,假设您想知道每个单词在语料库中出现的次数(而不是在单个文档中)。你知道吗
作为输出接收的矩阵是一个“numpy”(另一个包)数组。这可以通过执行以下操作轻松展平(求和所有行):
这会给你一些类似于:
单词的列顺序相同。你知道吗
最后,您可以通过执行以下操作从词典中筛选术语:
希望这有帮助!你知道吗
阅读更多关于CountVectorizer的信息:https://scikit-learn.org/stable/modules/generated/sklearn.feature_extraction.text.CountVectorizer.html#sklearn.feature_extraction.text.CountVectorizer
(另外,看看TFIDFVectorizer,如果你用的是一堆文字,tfidf在大多数情况下是一个巨大的升级)
我还建议您使用sklearn:https://scikit-learn.org/stable/modules/feature_extraction.html查看本页的特征提取
相关问题 更多 >
编程相关推荐