CountVectorzier用于句子标记的列表

时间:2018-10-23 14:16:07

标签: python list

我有一个单词列表(实际上是在监督下进行标记化处理):

data = [['this', 'is', 'my sentence'], ['try'], ...]

现在,我想在CountVectorizer上使用data(每个列表的确是一个句子)。我怎样才能做到这一点?

很明显,我无法将句子中的每个单词都连接在一起,因为它们已被标记化,我想对每个标记计数。

更准确地说,我们定期将语料库传递给矢量化器,如下所示:

from sklearn.feature_extraction.text import CountVectorizer
vectorizer = CountVectorizer()
X = vectorizer.fit_transform(corpus)

我该如何将语料库传递给矢量化器?

2 个答案:

答案 0 :(得分:0)

函数CountVectorizer将文本集合转换为令牌计数。该示例接收一个单词列表并返回所需的值,但是首先我们通过将每个列表中的单词连接起来来创建语料库。

from sklearn.feature_extraction.text import CountVectorizer

example1 = 'This is the first document.'.split()

data = [['This', 'document', 'is', 'the', 'second', 'document.'],['This', 'is', 'the', 'first', 'document.']]
corpus = [' '.join(i) for i in data] #create your corpus here

vectorizer = CountVectorizer()
X = vectorizer.fit_transform(corpus)
print(vectorizer.get_feature_names())
print(X.toarray())

已编辑 如果您只想对列表中的元素进行计数,而又不想与令牌计数和特征矩阵一起返回,则需要Counter

from collections import Counter

data = [['This', 'document', 'is', 'the', 'second', 'document.'],['This', 'is', 'the', 'first', 'document.']]
counts = [Counter(d) for d in data]

for c in counts:
    print(c) 

counts是dict格式的Counters的列表。您可以使用c.items()来进一步访问该字典。

答案 1 :(得分:0)

您可以通过覆盖标记器预处理器来解决您的问题。

试试这个

vectorizer = CountVectorizer(tokenizer=lambda x: x, preprocessor=lambda x: x)
X = vectorizer.fit_transform(data)