如何使用Scikit学习CountVectorizer?

时间:2016-12-12 05:34:50

标签: python-3.x scikit-learn countvectorizer

我有一组单词,我必须检查它们是否存在于文档中。

WordList = [w1, w2, ..., wn]

另一组有文件清单,我必须检查这些文件是否存在。

如何使用scikit-learn CountVectorizer,以便术语 - 文档矩阵的特征只是WordList中的单词,每行代表每个特定文档,不会出现给定列表中的单词在各自的栏目中?

2 个答案:

答案 0 :(得分:1)

确定。我知道了。 代码如下:

from sklearn.feature_extraction.text import CountVectorizer
# Counting the no of times each word(Unigram) appear in document. 
vectorizer = CountVectorizer(input='content',binary=False,ngram_range=(1,1))
# First set the vocab
vectorizer = vectorizer.fit(WordList)
# Now transform the text contained in each document i.e list of text 
Document:list
tfMatrix = vectorizer.transform(Document_List).toarray()

这将仅输出带有来自wordList的特征的术语 - 文档矩阵。

答案 1 :(得分:1)

对于自定义文档,您可以使用Count Vectorizer方法

from sklearn.feature_extraction.text import CountVectorizer
vectorizer = CountVectorizer() #make object of Count Vectorizer
corpus = [
      'This is a cat.',
      'It likes to roam in the garden',
      'It is black in color',
      'The cat does not like the dog.',
      ]
X = vectorizer.fit_transform(corpus)
#print(X) to see count given to words

vectorizer.get_feature_names() == (
['cat', 'color', 'roam', 'The', 'garden',
 'dog', 'black', 'like', 'does', 'not',
 'the', 'in', 'likes'])

X.toarray()
#used to convert X into numpy array

vectorizer.transform(['A new cat.']).toarray()
# Checking it for a new document

其他矢量化器也可以像Tfidf矢量化器一样使用。 Tfidf矢量化器是一种更好的方法,它不仅可以提供特定文档中单词出现的次数,而且可以说明单词的重要性。

通过找到TF术语频率和IDF反向文档频率来计算。

术语频率是单词在特定文档中出现的次数,IDF是根据文档的上下文来计算的。 例如,如果文档与足球有关,则单词“ the”不会给出任何见解,而单词“ messi”将说明文档的上下文。 它是通过记录发生次数来计算的。 例如。 tf(“ the”)= 10     tf(“ messi”)= 5

idf("the") = log(10) = 0
idf("messi") = log(5) = 0.52

tfidf("the") = tf("the") * idf("the") = 10 * 0 = 0
tfidf("messi") = 5 * 0.52 = 2.6

这些权重可以帮助算法从文档中识别出重要单词,从而在以后帮助从文档中导出语义。