Как использовать Scikit Learn CountVectorizer?

У меня есть набор слов, для которого я должен проверить, присутствуют ли они в документах.

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

В другом комплекте есть список документов, в которых я должен проверить, присутствуют ли эти слова или нет.

Как использовать scikit-learn CountVectorizer, чтобы функции матрицы термин-документ были только словами из WordList, и каждая строка представляла каждый конкретный документ, и ни разу слово из данного списка не появлялось в соответствующем столбце?


person Sanjeev    schedule 12.12.2016    source источник


Ответы (2)


В порядке. Я понял. Код приведен ниже:

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.

person Sanjeev    schedule 12.12.2016
comment
Приведенный выше код, кажется, работает нормально, но мой WordList имеет 500 элементов, а tfMatrix [0], tfMatrix [1] ..., tfMatrix [n] должен иметь 500 элементов, но всего 464 элемента. В чем может быть причина? - person Ganesh M S; 20.10.2019

Для пользовательских документов вы можете использовать подход 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. Векторизатор tfidf - лучший подход, поскольку он не только показывает количество вхождений слов в конкретный документ, но также сообщает о важности слова.

Он рассчитывается путем нахождения частоты 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

Эти веса помогают алгоритму идентифицировать важные слова из документов, что впоследствии помогает получить семантику из документа.

person Deepshikha Sethi    schedule 26.09.2018
comment
Исправьте незначительные ошибки в своем ответе. log (10) == 1 и idf! = log (tf). на самом деле это idf (d, t) = log [n / df (d, t)] + 1 (if smooth_idf=False), где n - общее количество документов, а df (d, t) - частота документов; github.com/scikit-learn/ scikit-learn / blob / a24c8b46 / sklearn / - person nantitv; 17.11.2018