gpt4 book ai didi

python - 我可以在 scikit-learn 中使用 CountVectorizer 来计算未用于提取标记的文档的频率吗?

转载 作者:IT老高 更新时间:2023-10-28 21:40:07 24 4
gpt4 key购买 nike

我一直在使用 scikit-learn 中的 CountVectorizer 类。

我了解,如果以如下所示的方式使用,最终输出将由一个包含特征计数或标记的数组组成。

这些标记是从一组关键字中提取的,即

tags = [
"python, tools",
"linux, tools, ubuntu",
"distributed systems, linux, networking, tools",
]

下一步是:

from sklearn.feature_extraction.text import CountVectorizer
vec = CountVectorizer(tokenizer=tokenize)
data = vec.fit_transform(tags).toarray()
print data

我们在哪里

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

这很好,但我的情况有点不同。

我想以与上述相同的方式提取特征,但我不希望 data 中的行与提取特征的文档相同。

换句话说,我怎样才能获得另一组文档的计数,例如,

list_of_new_documents = [
["python, chicken"],
["linux, cow, ubuntu"],
["machine learning, bird, fish, pig"]
]

得到:

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

我已经阅读了 CountVectorizer 类的文档,发现了 vocabulary 参数,它是术语到特征索引的映射。然而,我似乎无法得到这个论点来帮助我。

感谢任何建议。
PS:由于Matthias Friedrich's Blog的所有信用对于我上面使用的示例。

最佳答案

你说得对,vocabulary 就是你想要的。它的工作原理是这样的:

>>> cv = sklearn.feature_extraction.text.CountVectorizer(vocabulary=['hot', 'cold', 'old'])
>>> cv.fit_transform(['pease porridge hot', 'pease porridge cold', 'pease porridge in the pot', 'nine days old']).toarray()
array([[1, 0, 0],
[0, 1, 0],
[0, 0, 0],
[0, 0, 1]], dtype=int64)

所以你将你想要的特性作为键传递给它。

如果您在一组文档上使用了 CountVectorizer,然后您想将这些文档中的一组特征用于新的集合,请使用您的 vocabulary_ 属性原始的 CountVectorizer 并将其传递给新的。所以在你的例子中,你可以这样做

newVec = CountVectorizer(vocabulary=vec.vocabulary_)

使用您的第一个词汇创建一个新的分词器。

关于python - 我可以在 scikit-learn 中使用 CountVectorizer 来计算未用于提取标记的文档的频率吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22920801/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com