如何使用Scikit学习CountVectorizer?

How to use the Scikit learn CountVectorizer?

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

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

另一组有文档列表,我必须检查这些词是否存在。

如何使用 scikit-learn CountVectorizer 以便术语文档矩阵的特征只是来自 WordList 的单词,并且每一行代表每个特定文档,没有给定单词的次数列表出现在各自的列中?

好的。我得到它。 代码如下:

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 的特征的术语文档矩阵。

对于自定义文档,您可以使用 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 Vectorizer 一样使用其他 Vectorizer。 Tfidf vectorizer 是一种更好的方法,因为它不仅提供了特定文档中单词出现的次数,还说明了单词的重要性。

它是通过找到TF-词频和IDF-逆文档频率来计算的。

Term Freq 是一个词在特定文档中出现的次数,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

这些权重帮助算法识别文档中的重要词,这些词随后有助于从文档中导出语义。