Моделирование тем, Gensim, Python, Получение моделей тем в соответствии с фиксированными идентификаторами или связанными данными - PullRequest
0 голосов
/ 12 декабря 2018

У меня есть вопрос о моделировании тем с помощью библиотеки Python и Gensim: когда я запускаю следующий код, он работает хорошо и предлагает связанные темы, но я хочу видеть каждую тему для каждого документа в списке в файле .csv, но этоперетасовки.Например, 1-я тема из 2-го документа, но 2-я тема из 1-го документа, а 3-я из 3-го.И когда я запускаю тот же код, он снова перемешивается.Как я могу это исправить и получить темы по каждому документу и / или связанным темам непосредственно с идентификаторами или авторами документов, которые могут быть перечислены в 1-м столбце?

Коды:

Шаг 1:

 import nltk
 import csv
 import re
 import nltk.corpus
 import gensim
 from gensim import corpora
 from nltk.corpus import stopwords
 from nltk.stem.wordnet import WordNetLemmatizer
 import string

Шаг 2: загрузка данных и обработка

 doc_complete = open('/home/erdal/Desktop/big_data/abstract1.csv', 'r').readlines()
 stop = set(stopwords.words('english'))
 exclude = set(string.punctuation)
 lemma = WordNetLemmatizer()
 def clean(doc):
    stop_free = " ".join([i for i in doc.lower().split() if i not in stop])
    punc_free = ''.join(ch for ch in stop_free if ch not in exclude)
    normalized = " ".join(lemma.lemmatize(word) for word in punc_free.split())
    return normalized
    doc_clean = [clean(doc).split() for doc in doc_complete]
    print(doc_clean)
    dictionary = corpora.Dictionary(doc_clean)
    doc_term_matrix = [dictionary.doc2bow(doc) for doc in doc_clean]
    Lda = gensim.models.ldamodel.LdaModel
    ldamodel = Lda(doc_term_matrix, num_topics=3, id2word = dictionary, passes=50)
    print(ldamodel.print_topics(num_topics=3, num_words=3))

Шаг 3: Печать тем

  myData = ldamodel.print_topics(num_topics=3, num_words=3)
  myFile = open('/home/erdal/Desktop/big_data/all_data_1_topics.csv', 'w')
  with myFile:
   writer = csv.writer(myFile)
   writer.writerows(myData)
   print("Writing complete")

Темы:

 [(0, '0.036*"learning" + 0.036*"student" + 0.026*"intergroup"'), (1, '0.005*"abstract" + 0.005*"significant" + 0.005*"using"'), (2, '0.042*"clickers" + 0.027*"motivation" + 0.027*"student"')]
...