2016-06-16 2 views
0

Я делаю анализ LDA с Python. И я использовал следующий код для создания документа термин матрицыКак извлечь частоту слов из матрицы документов?

corpus = [dictionary.doc2bow(text) for text in texts]. 

Есть ли простой способ сосчитать частоту слова по всему корпусу. Поскольку у меня есть словарь, который является списком терминов, я думаю, что я могу совместить частоту слов с термином-id.

+0

я не использовал это много - но есть проблема с использованием merge_with() или add_documents()? https://radimrehurek.com/gensim/corpora/dictionary.html –

ответ

4

Вы можете использовать nltk для того, чтобы подсчитать частоту слов в строке texts

from nltk import FreqDist 
import nltk 
texts = 'hi there hello there' 
words = nltk.tokenize.word_tokenize(texts) 
fdist = FreqDist(words) 

fdist даст вам частоту слов в данной строке texts.

Однако у вас есть список текстов. Одним из способов подсчета частоты является использование CountVectorizer от scikit-learn для списка строк.

import numpy as np 
from sklearn.feature_extraction.text import CountVectorizer 
texts = ['hi there', 'hello there', 'hello here you are'] 
vectorizer = CountVectorizer() 
X = vectorizer.fit_transform(texts) 
freq = np.ravel(X.sum(axis=0)) # sum each columns to get total counts for each word 

freq это будет соответствовать дорожить в словаре vectorizer.vocabulary_

import operator 
# get vocabulary keys, sorted by value 
vocab = [v[0] for v in sorted(vectorizer.vocabulary_.items(), key=operator.itemgetter(1))] 
fdist = dict(zip(vocab, freq)) # return same format as nltk 
+0

Спасибо. Но проблема в том, что мои тексты - это не только один документ. Кажется, это список, у меня есть тексты [1], тексты [2] .... –

+0

@ AegeanT.Wu, я обновил ответ, если у вас есть список текстов – titipata

+0

vocab отсортирован, но freq нет, это все еще нормально? – learn2day

Смежные вопросы