Попытка использовать библиотеку для проведения топи c моделирования, но это не очень хорошо - PullRequest
0 голосов
/ 11 марта 2020

У меня есть матрица терминов-документов .csv, и я хочу выполнить некоторое скрытое распределение дирихле с использованием gensim в python. Однако я не особенно знаком с Python или LDA.

, которые я разместил на форуме gensim ...? Я не знаю, если это так называется. Парень, который написал пакет, ответил и сказал следующее:

насколько велика ваша матрица CSV для курсовых документов?

Если она достаточно мала = помещается в ОЗУ, вы можете:

1) с помощью numpy .loadtxt () загрузить CSV в матрицу в памяти

2) преобразовать матрицу в корпус с помощью gensim.matutils.Dense2Corpus (). Проверьте его флаг documents_columns, он позволяет вам легко переключаться между терминами документа и терминами документа.

3) использовать этот корпус для обучения вашей модели LDA.

Так что я полагаю, что ответ на этот вопрос не верен.

Кажется, словарь является необходимым входом для модели LDA; это не правильно? Вот что у меня есть, что я думаю, успешно вставляет .csv в корпус.

file = np.genfromtxt(fname=fPathName, dtype="int", delimiter=",", skip_header=True, missing_values="", filling_values=0)


corpus = gensim.matutils.Dense2Corpus(file, documents_columns=False)

Любая помощь приветствуется.

Редактировать: получается, что словарь Gensim и словарь Python не совсем одно и то же.

1 Ответ

0 голосов
/ 14 марта 2020

Итак, из документации Gensim я взял этот фрагмент кода:

from gensim.models import LdaModel
from gensim.test.utils import common_texts
from gensim.corpora.dictionary import Dictionary

# Create a corpus from a list of texts
common_dictionary = Dictionary(common_texts)
common_corpus = [common_dictionary.doc2bow(text) for text in common_texts]

# Train the model on the corpus.
lda = LdaModel(common_corpus, num_topics=10)

Файл, который вы хотите проанализировать, - это csv, поэтому для его открытия вы можете использовать pandas

import pandas as pd
df = pd.read_csv(filename) # add header=None if the file has no column names

После того, как вы импортируете файл, у вас есть все, что загружено в фрейм данных, вам нужно объединить весь текст в уникальный список (см. Первый комментарий к фрагменту кода gensim), который должен выглядеть следующим образом

["text one..", "text 2..", "text 3..."]

You можно сделать это, перебирая фрейм данных и добавляя текст в пустой список. Прежде чем сделать это, вам также необходимо проверить, какой столбец вашего CSV-файла содержит текст для анализа.

common_texts = [] # initialise empty list
for ind, row in df.iteritem():
    text = row[name_column_with_text]
    common_texts.append(text)

Как только вы получите свой список текста, вы можете просто применить код из документации Gensim. Конечно, у вас могут быть проблемы с памятью, это зависит от размера вашего CSV-файла.

...