Использование Sklearn's CountVectorizer для поиска нескольких строк не по порядку - PullRequest
0 голосов
/ 26 октября 2018

Можно ли использовать CountVectorizer для определения того, появляется ли набор слов в корпусе независимо от порядка?

Это может сделать заказанные фразы: Как я могу использовать sklearn CountVectorizer со строками разной длины?

Тем не менее, в моем случае набор слов не попадает рядом друг с другом, поэтому при разбивке по фразе целиком, а затем попытка найти в каком-либо текстовом документе приведет к нулю находок

Я мечтаю о том, чтобы произошло следующее:

import numpy as np
from sklearn import feature_extraction

sentences = [ "The only cool Washington is DC", 
              "A cool city in Washington is Seattle",
              "Moses Lake is the dirtiest water in Washington" ]

listOfStrings = ["Washington DC",
                 "Washington Seattle",  
                 "Washington cool"]

vectorizer = CountVectorizer(vocabulary=listOfStrings)
bagowords = np.matrix(vectorizer.fit_transform(sentences).todense())
bagowords
matrix([[1, 0, 1],
        [0, 1, 1],
        [0, 0, 0],])

Актуальная проблема влечет за собой большее количество слов между ними, и, следовательно, удаление стоп-слов здесь не будет правильным решением. Любой совет будет потрясающим!

1 Ответ

0 голосов
/ 30 октября 2018

Как уже говорилось в комментариях, поскольку вы хотите узнать, какие слова присутствуют в документе, или нет, вам потребуется немного изменить словарный запас (listOfStrings).

sentences = [ "The only cool Washington is DC", 
              "A cool city in Washington is Seattle",
              "Moses Lake is the dirtiest water in Washington" ]

from sklearn.feature_extraction.text import CountVectorizer
listOfStrings = ["washington", "dc", "seattle", "cool"]
vectorizer = CountVectorizer(vocabulary=listOfStrings,
                             binary=True)   

bagowords = vectorizer.fit_transform(sentences).toarray()

vectorizer.vocabulary
['washington', 'dc', 'seattle', 'cool']

bagowords
array([[1, 1, 0, 1],
       [1, 0, 1, 1],
       [1, 0, 0, 0]])

Я добавил binary=True в CountVectorizer, так как вы не хотите, чтобы фактические значения, только проверьте, присутствует ли слово.

Вывод bagowords соответствует порядку словарного запаса (listOfStrings) выв комплект поставки.Таким образом, первый столбец показывает, присутствует ли «washinton» в документах или нет, второй столбец проверяет наличие «dc» и т. Д.

Конечно, вам нужно будет обратить внимание на другие параметры в CountVectorizer, которые могут повлиять на это.,Например:

  • lowercase по умолчанию True, поэтому я использовал строчные слова в listOfStrings.В противном случае «DC», «Dc», «dc» рассматриваются как отдельные слова.
  • Вам также следует изучить эффект параметра token_pattern, который по умолчанию сохраняет только буквенно-цифровые строки длиной 2 или более.Поэтому, если вы хотите обнаружить слова из одной буквы, такие как «а», «я» и т. Д., Вам нужно это изменить.

Надеюсь, это поможет.Если ничего не понимаю, не стесняйтесь спрашивать.

...