2016-10-21 1 views
3
from nltk.tokenize import RegexpTokenizer 
from stop_words import get_stop_words 
from gensim import corpora, models 
import gensim 
import os 
from os import path 
from time import sleep 

tokenizer = RegexpTokenizer(r'\w+') 
en_stop = set(get_stop_words('en')) 
with open(os.path.join('c:\users\kaila\jobdescription.txt')) as f: 
    Reader = f.read() 


texts = unicode(Reader, errors='replace') 
tdm = [] 

#Converted all the text to lowercase for uniform analysis 
raw = texts.lower() 
#Tokenized the text to individual terms and created the stop list 
tokens = tokenizer.tokenize(raw) 
stopped_tokens = [i for i in tokens if not i in en_stop] 
tdm.append(stopped_tokens) 

dictionary = corpora.Dictionary(tdm) 
corpus = [dictionary.doc2bow(i) for i in tdm] 
sleep(3) 
#Implemented the LdaModel 
ldamodel = gensim.models.ldamodel.LdaModel(corpus, num_topics=10, id2word = dictionary) 
print(ldamodel.print_topics(num_topics=5, num_words=8)) 

私の結果は、すべてのトピックを説明するのに似た言葉を持ち、確率が低すぎます。私が間違っていることは何ですか?誰かがより良い結果を生み出すのを助けることができるなら、それはすばらしいことになります。テキストファイルのトピックモデリングを実装した後、私はすべてのトピックを説明するために類似の言葉を得ており、結果は不正確です。

次は私の結果である:

(0、u'0.019 *意志+ 0.010 *経験+ 0.009 *アカウント+ 0.009 *金融+ 0.008 *会計+ 0.008 * 0.008 +金融*チーム+ 0.007 *財務+ 0.009 *経験+ 0.008 *管理+ 0.008 *会計+ 0.007 *ロール+ 0.007 *財務+ 0.007 *仕事)、(7、u'0.017 * + 0.011 *エクスペリエンス+ 0.010 *ファイナンス+ 0.008 *エクスポージャー+0.013 *エクスペリエンス+0.012 *ファイナンス+ 0.008 *ロール+0.008 *財務+0.007 *アカウンティング+0.007 * 0.007 *財務+0.011 *経験+ 0.009 *財務+ 0.008 *管理+ 0.008 *会計+財務+0.011 *経験+ 0.007 *事業+ 0.007 * 0.008 *ロール+ 0.007 *してください)

答えて

1

いいえあなたは何も間違ってはいませんが、出力を誤解しています。 LDAは、各トピックの下にあるすべての辞書単語の確率分布を生成する。トピックの数は、トピックの希望数と同じです。ここでは、トピック5のトピックと、各トピックの下のトピック8の単語を確率値で表示しているので、あなたが提供した答えは論理的です。ところで、確率値は非常に小さくなる可能性があります。そのことについては心配しないでください。

LDAモデルを訓練するために使用されるデータセットが十分に多様でないため、いくつかのトピックのトップワードがほぼ同じであり、推論されたトピックが互いに非常に近いことも表しています。多様化したトピックを期待している場合は、必要なトピック数を表す代表的なデータが必要です。

+0

お返事ありがとうございます。より良い結果を得るためにデータをより多様化させるために現在作業できるようになり、非常に役に立ちました。 – Raj

関連する問題