Избегайте двойного счета при использовании CountVectorizer для ngram_range = (1, 2) - PullRequest
0 голосов
/ 17 апреля 2019

Я хотел бы посчитать наиболее часто используемые слова или комбинации двух слов в тексте (ngram_range = (1,2)).Я хотел бы «предпочесть» любую 2-граммовую комбинацию, чтобы вхождение одного слова считалось только один раз.

Однако приведенный ниже код считает вхождение слова дважды.Например, рассмотрим термин «права защищены».Я не хочу, чтобы слово «права» учитывалось один раз для одного (1-граммового) вхождения и еще раз для 2-граммового вхождения в «праве защищены», так что общее количество «прав» равно 2.

text = 'The digital transformation needs digital products so that the digital transformation can be succesful.'

ngram_vectorizer = CountVectorizer(analyzer='word', decode_error='ignore', ngram_range=(1, 2), min_df=1, stop_words='english', lowercase=True)

X = ngram_vectorizer.fit_transform(text)
vocab = ngram_vectorizer.get_feature_names()                           
counts = X.sum(axis=0).A1                                              
freq_distribution = Counter(dict(zip(vocab, counts)))                  
topcounts = dict(freq_distribution.most_common(4))

Вывод вышеприведенного кода даст следующие topcounts: digital: 3;цифровое преобразование: 2, потребности: 1, продукты: 1 .

Однако я хотел бы получить следующие результаты: цифровое преобразование: 2, цифровое: 1, потребности: 1, продукты: 1

Есть ли у вас какие-либо предложения??Заранее спасибо!

...