如何使用CountVectorizer来获取短语的计数而不计算短语中的单词?

时间:2019-05-09 05:09:24

标签: python scikit-learn nlp tokenize

我正在从事一个NLP项目,我希望对句子进行标记化并获得不同标记的计数。有时候,我希望一些单词成为一个短语,并且不要计算该短语中的单词。

我发现scikit-learn中的CountVectorizer可以对短语进行计数,但是我不知道如何删除短语中的单词。

例如:

words = ['cat', 'dog', 'walking', 'my dog']
example = ['I was walking my dog and cat in the park']
vect = CountVectorizer(vocabulary=words, ngram_range=(1,2))
dtm = vect.fit_transform(example)
print(dtm)

我知道了

>>> vect.get_feature_names()
['cat', 'dog', 'walking', 'my dog']
>>> print(dtm)
  (0, 0)    1
  (0, 1)    1
  (0, 2)    1
  (0, 3)    1

我想要的是:

>>> print(dtm)
  (0, 0)    1
  (0, 2)    1
  (0, 3)    1

但是我想在字典中保留'dog',因为它可能会单独出现在其他文本中。

1 个答案:

答案 0 :(得分:0)

CountVectorizer中没有任何特定配置可首先应用较长的字符串并将其从字符串中删除,以防止计算较短的子字符串。

因此,一种解决方案可以像您一样使用CountVectorzier。向后 在单词CountVectorizer的第一个结果中,对单词进行迭代以找到较长短语中包含的单词,然后从包含的较短短语中减去较长短语的数量。