こんなかんじ
半分に分けて、片方をもとにトピックを作っているので、
毎回、トピックが動いてしまう。trainのほうは、トピックつくるための
固定したものでよさげ
#################################### #ファイル読み込み #################################### file_name='nihongo.csv' file=open(file_name) fr = file.readlines() #空白行を削除 fdata = [] for row in fr: row = row.rstrip() if not row: continue fdata.append(row) file.close() #################################### #形態素解析してデータ取り出し #################################### from janome.tokenizer import Tokenizer t = Tokenizer() DATA=[] for rec in fdata: token = t.tokenize(str(rec)) output=[] for w in token: if w.part_of_speech.find("名詞") >= 0: output.append(w.surface) elif w.part_of_speech.find("動詞") >= 0: output.append(w.base_form) DATA.append(output) #################################### #データ確認 #################################### for rec in DATA: print(rec) #################################### #dataをtestとtrainに #################################### import random import math half=math.floor(len(DATA)/2) train=DATA[:half] test=DATA[half:] #################################### # LDAモデル作成 #################################### from gensim.test.utils import common_texts from gensim.corpora.dictionary import Dictionary from gensim.models import LdaModel dictionary=Dictionary(train) print(dictionary) # filtering dictionary.filter_extremes(no_below=2,no_above=0.5) #トークンをID表現に token_2_id=dictionary.token2id id_2_token={} for key in token_2_id.keys(): id_2_token[token_2_id[key]]=key print(len(id_2_token)) print(id_2_token) #訓練データをID表現に input_data=[dictionary.doc2bow(text) for text in train] print(len(input_data)) print(input_data) #LDA実施(トピック分け) n=5 #トピックを5とする lda=LdaModel(input_data,num_topics=n,id2word=id_2_token) print(lda.bound(input_data)) print(lda.log_perplexity(input_data)) #トピックのうちわけ for i in range(n): print(i,' ',lda.print_topic(i)) print() #################################### # LDAモデルから対象文の分散表現 #################################### test_data=[dictionary.doc2bow(text) for text in test] res_inference=lda.inference(test_data) for i in range(len(res_inference[0])): print(i,test[i],":",res_inference[0][i]) |
半分に分けて、片方をもとにトピックを作っているので、
毎回、トピックが動いてしまう。trainのほうは、トピックつくるための
固定したものでよさげ