Матрица подсчета слов в корпусе документов с помощью Pandas Dataframe - PullRequest
0 голосов
/ 23 ноября 2018

Что ж, у меня есть корпус из более чем 2000 текстовых документов, и я пытаюсь сделать матрицу с панелью данных панд самым элегантным способом.Матрица будет выглядеть следующим образом:

df=pd.DataFrame(index=['Doc1_name','Doc2_name','Doc3_name','...','Doc2000_name']
                , columns=['word1','word2','word3','...','word50956'])
df.iloc[:,:] = 'count_word'
print(df)

У меня уже есть весь документ в виде полнотекстового списка, называемого «тексты». Я не знаю, достаточно ли ясен мой вопрос.

Ответы [ 2 ]

0 голосов
/ 23 ноября 2018

Для любого не маленького корпуса текста я настоятельно рекомендую использовать scikit-learn * CountVectorizer .

Это так же просто, как:

from sklearn.feature_extraction.text import CountVectorizer

count_vectorizer = CountVectorizer()
word_counts = count_vectorizer.fit_transform(corpus) # list of documents (as strings)

Этоточно не дает вам фрейм данных в желаемой структуре, но не должно быть сложно построить его, используя атрибут vocabulary_ count_vectorizer, который содержит отображение термина на его индекс в матрице результатов.

0 голосов
/ 23 ноября 2018

Используйте sklearn's CountVectorizer :

from sklearn.feature_extraction.text import CountVectorizer


df = pd.DataFrame({'texts': ["This is one text (the first one)",
                             "This is the second text",
                             "And, finally, a third text"
                            ]})

cv = CountVectorizer()
cv.fit(df['texts'])

results = cv.transform(df['texts'])

print(results.shape) # Sparse matrix, (3, 9)

Если корпус достаточно мал, чтобы поместиться в вашей памяти (а 2000+ достаточно мал), вы можете преобразовать разреженную матрицу вpandas dataframe следующим образом:

features = cv.get_feature_names()
df_res = pd.DataFrame(results.toarray(), columns=features)

df_res - это результат, который вы хотите:

df_res
index and   finally first   is  one second  text    the third   this
0     0     0       1       1   2   0       1       1   0       1
1     0     0       0       1   0   1       1       1   0       1
2     1     1       0       0   0   0       1       0   1       0

Если вы получаете MemoryError, вы можете уменьшить словарьслова для рассмотрения использования различных параметров CountVectorizer:

  1. Установить параметр stop_words='english', чтобы игнорировать английские стоп-слова (например, the и `and)
  2. Использовать min_df и max_df, что заставляет CountVectorizer игнорировать некоторые слова на основе частоты документа (слишком частые или редкие слова, которые могут быть бесполезны)
  3. Используйте max_features, чтобы использовать только самые распространенные n слова.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...