如何从未见过的文档的列表中识别术语



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

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, ...]

也就是说,第一个文档有两个感兴趣的术语,第二个文档有 1(由三个单词组成(依此类推。

如果需要考虑 1 个单词长度的术语,那么我可以轻松地按字母顺序对每个文档进行排序,删除重复的术语(set(,然后与大小为 1 个单词的术语相交。计算重复的单词是搜索结果。

但是就长度而言>=2,事情变得棘手。

我一直在使用 gensim 来形成一个单词袋并在使用新短语时检测索引

例如

dict_terms = corpora.Dictionary(phrases)
sentence = unseen_docs[0]
idxs     = dict_terms[sentence]

然后计算 seend idxs,考虑索引是否是连续的,这意味着已经看到了一个术语,而不是其中的 2 或 3。

任何建议。

在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,如果你使用单词袋,tf-idf在大多数情况下是一个巨大的升级(

我还建议您查看此页面,了解使用 sklearn 进行特征提取: https://scikit-learn.org/stable/modules/feature_extraction.html

最新更新