2015-08-17 3 views
5

Я новичок в python. Я только начал работать над проектом, чтобы использовать моделирование LDA на твитах. Я пытаюсь использовать следующий код:LDA тема моделирования входных данных

В этом примере используется онлайн-набор данных. У меня есть файл csv, который включает в себя твиты, которые мне нужно использовать. Может ли кто-нибудь сказать мне, как я могу использовать свой локальный файл? Как мне сделать свой собственный вокал и титулы?

Я не смог найти учебник, в котором объясняется, как подготовить материалы для LDA. Все они предполагают, что вы уже знаете, как это сделать.

from __future__ import division, print_function 
 

 
import numpy as np 
 
import lda 
 
import lda.datasets 
 

 

 
# document-term matrix 
 

 
X = lda.datasets.load_reuters() 
 
print("type(X): {}".format(type(X))) 
 
print("shape: {}\n".format(X.shape)) 
 

 
# the vocab 
 
vocab = lda.datasets.load_reuters_vocab() 
 
print("type(vocab): {}".format(type(vocab))) 
 
print("len(vocab): {}\n".format(len(vocab))) 
 

 
# titles for each story 
 
titles = lda.datasets.load_reuters_titles() 
 
print("type(titles): {}".format(type(titles))) 
 
print("len(titles): {}\n".format(len(titles))) 
 

 

 
doc_id = 0 
 
word_id = 3117 
 

 
print("doc id: {} word id: {}".format(doc_id, word_id)) 
 
print("-- count: {}".format(X[doc_id, word_id])) 
 
print("-- word : {}".format(vocab[word_id])) 
 
print("-- doc : {}".format(titles[doc_id])) 
 

 

 
model = lda.LDA(n_topics=20, n_iter=500, random_state=1) 
 
model.fit(X) 
 

 

 
topic_word = model.topic_word_ 
 
print("type(topic_word): {}".format(type(topic_word))) 
 
print("shape: {}".format(topic_word.shape)) 
 

 

 
for n in range(5): 
 
    sum_pr = sum(topic_word[n,:]) 
 
    print("topic: {} sum: {}".format(n, sum_pr)) 
 

 

 
n = 5 
 
for i, topic_dist in enumerate(topic_word): 
 
    topic_words = np.array(vocab)[np.argsort(topic_dist)][:-(n+1):-1] 
 
    print('*Topic {}\n- {}'.format(i, ' '.join(topic_words))) 
 

 

 
doc_topic = model.doc_topic_ 
 
print("type(doc_topic): {}".format(type(doc_topic))) 
 
print("shape: {}".format(doc_topic.shape))

ответ

6

Я знаю, что это происходит немного поздно, но надеюсь, что это, во-первых helps.You должны понимать, что LDA применяется на DTM (Document Term Matrix) только. Итак, я предлагаю вам выполнить следующие действия:

  1. Загрузить файл CSV
  2. Извлечение необходимых твитов из файла
  3. Очистите данные
  4. Создать словарь, содержащий каждое слово корпуса генерируется
  5. Построить TDM структура
  6. Установить структуру файла данных
  7. Получить словарь - Функции TDM (слова)
  8. Продолжайте использовать код выше

Здесь может предоставить этот код, чтобы помочь вам начать работу -

token_dict = {} 

for i in range(len(txt1)): 
    token_dict[i] = txt1[i] 

len(token_dict) 


print("\n Build DTM") 
%time tf = CountVectorizer(stop_words='english') 

print("\n Fit DTM") 
%time tfs1 = tf.fit_transform(token_dict.values()) 

# set the number of topics to look for 
num = 8 

model = lda.LDA(n_topics=num, n_iter=500, random_state=1) 

# we fit the DTM not the TFIDF to LDA 
print("\n Fit LDA to data set") 
%time model.fit_transform(tfs1) 

print("\n Obtain the words with high probabilities") 
%time topic_word = model.topic_word_ # model.components_ also works 

print("\n Obtain the feature names") 
%time vocab = tf.get_feature_names()