質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

6520閲覧

cannot compute lda over an empty collection (no terms)

grx72expo

総合スコア15

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2018/02/01 03:38

編集2018/02/01 06:23

LDAを実行したいのですが
以下のエラーが表示されます。何が原因か教えてください。
イメージ説明

やりたいことのイメージとしては、フォルダの各テキストファイルのトピックを知りたいといった感じです。

ソースコードは以下の通りです(LDA.py)。

python

1import os 2import codecs as cd 3import gensim 4from janome.tokenizer import Tokenizer 5from gensim import corpora, models, similarities 6 7folder = 'aaa' 8filenames = os.listdir(folder) 9for filename in filenames : 10 datafile = open(folder+'/'+filename, encoding='utf-8') 11 lines = datafile.readlines() 12 13t = Tokenizer() 14wvs = [] 15 16for i, line in enumerate(lines): 17 word_vector = [] 18 19 20 if len(line)<30: 21 continue 22 else: 23 tokens = t.tokenize(line) 24 25 for token in tokens: 26 if token.part_of_speech[:2] == '名詞': 27 word_vector += [token.base_form] 28 29 30 wvs += [word_vector] 31 32dictionary = corpora.Dictionary(wvs) 33dictionary.filter_extremes(no_below=2, no_above=0.3) 34dictionary.save_as_text('dict.txt') 35 36 37corpus = [dictionary.doc2bow(text) for text in wvs] 38corpora.MmCorpus.serialize('cop.mm', corpus) 39 40 41dictionary = gensim.corpora.Dictionary.load_from_text('dict.txt') 42corpus = corpora.MmCorpus('cop.mm') 43 44 45topic_N = 20 46lda = gensim.models.ldamodel.LdaModel(corpus=corpus, num_topics=topic_N, id2word=dictionary) 47 48for i in range(topic_N): 49 print('TOPIC:', i, '__', lda.print_topic(i))

環境はwindows10,ubuntu16.04です。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mkgrei

2018/02/01 04:17

エラーメッセージの全文を貼り付けていただけませんか。どこでエラーが起きているのか人で確かめるのは大変です。またコードを```で囲んでください。インデントが崩れて読めません。
guest

回答1

0

ベストアンサー

python

1corpus = corpora.MmCorpus('cop.mm') 2 3topic_N = 20 4lda = gensim.models.ldamodel.LdaModel(corpus=corpus, num_topics=topic_N, id2word=dictionary)

理由はわかるのですが、データが無いので修正の仕方はわかりません。
上記のコードのところでcorpusが空だと、エラーが再現できます。


追記

python

1import os 2import codecs as cd 3import gensim 4from janome.tokenizer import Tokenizer 5from gensim import corpora, models, similarities 6 7folder = 'aaa' 8filenames = os.listdir(folder) 9lines = [] 10for filename in filenames : 11 with open(folder+'/'+filename, encoding='utf-8') as datafile: 12 lines += datafile.readlines()

投稿2018/02/01 09:10

編集2018/02/02 11:19
mkgrei

総合スコア8560

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

grx72expo

2018/02/01 14:12

回答ありがとうございます。 corpusが空とはどういうことでしょうか?申し訳ございませんがご教授願います。 あと、dictionary.filter_extremes(no_below=2, no_above=0.3) を削除したら実行できたのですが、これはテキストデータが少ないことが原因なのでしょうか?
mkgrei

2018/02/02 01:17

そちらのdictionaryに中身がなくても同じエラーになるのですね。 その条件を満たす要素がなかったせいですね。
grx72expo

2018/02/02 06:53

dictionaryの中身を確認したら、フォルダ内の1つ目のテキストファイルしか処理されていませんでした。 フォルダの全テキストファイルを処理するにはどの個所を修正したらよいのでしょうか? 何度もすいませんがよろしくお願いします。
mkgrei

2018/02/02 08:02

lines = datafile.readlines() が書き換わっているからです。
grx72expo

2018/02/02 09:20

もう少し具体的に修正方法を書いていただけると助かります。
can110

2018/02/02 09:47

実際に動かしてみる(print(lines)してみる)と一目瞭然かと思いますが?
grx72expo

2018/02/02 10:21

すみません。テキストファイルを1文ごとに改行したら実行できました。
grx72expo

2018/02/02 10:47

何度もすみません。できたと思ったのですが、今度はフォルダ内の最後のファイルしか実行されていませんでした。
mkgrei

2018/02/02 11:20

追記しました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問