如何从看不见文档的列表中识别术语

2024-04-26 20:59:07 发布

您现在位置:Python中文网/ 问答频道 /正文

给定一个可以由一个、两个甚至三个单词组成的预定义术语列表,问题是如何在一组具有自由词汇表(即许多单词)的文档中计算它们的出现次数。你知道吗

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个。你知道吗

任何建议。你知道吗


Tags: 文档docsdoc单词dictsentencew1术语
1条回答
网友
1楼 · 发布于 2024-04-26 20:59:07

在Scikit learn(一个非常流行的机器学习Python包)中,有一个模块,它完全满足您的要求:

以下是操作方法:

首先安装sklearn

pip install scikit-learn

现在代码是:

from sklearn.feature_extraction.text import CountVectorizer

vectorizer = CountVectorizer(ngram_range=(1, 3))

#Given your corpus is an iterable of strings, or a List of strings, for simplicity:
corpus = [...]

X = vectorizer.fit_transform(corpus)

print(X)

输出是一个大小为m x n的矩阵,例如:

[[0 1 1 1 0 0 1 0 1]
 [0 2 0 1 0 1 1 0 1]
 [1 0 0 1 1 0 1 1 1]
 [0 1 1 1 0 0 1 0 1]]

表示单词,表示文档。所以对于每一行,你都有一个单词包。你知道吗

但是如何检索出现在哪里的单词呢?您可以使用以下方法获取每个“列”名称:

print(vectorizer.get_feature_names())

你会得到一个单词列表(单词按字母顺序排列)。你知道吗

现在,假设您想知道每个单词在语料库中出现的次数(而不是在单个文档中)。你知道吗

作为输出接收的矩阵是一个“numpy”(另一个包)数组。这可以通过执行以下操作轻松展平(求和所有行):

import numpy as np #np is like a convention for numpy, if you don't know this already.

sum_of_all_words = np.sum(X, axis=0)

这会给你一些类似于:

[[1 4 2 4 1 1 4 1 4]]

单词的列顺序相同。你知道吗

最后,您可以通过执行以下操作从词典中筛选术语:

dict_terms = corpora.Dictionary(phrases)
counts = {}
words = vectorizer.get_feature_names()
for idx, word in enumerate(words):
   if word in dict_terms:
      counts[word] = sum_of_all_words[0, idx]


希望这有帮助!你知道吗

阅读更多关于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查看本页的特征提取

相关问题 更多 >