###困っていること
入力したファイルのトピックを抽出するための前段階として
指定したディレクトリ内の.txtファイルを用いてLDAモデルを作成するプログラムを実装したのですが、
現在のプログラムの場合全てのファイルの中身を1つの文字列に格納しているので、
どのファイルにどのようなトピックが含まれているのかを調べることができません。
実装したプログラムを以下に記します。
python
1import time 2import MeCab 3from gensim import corpora, models 4 5#ファイル指定 6doc = input('select file(ex, ○○.txt):') 7 8t0 = time.time() 9 10f = open(doc, "r",encoding = "utf-8") 11text = f.read() 12f.close() 13 14#文字列を改行位置で区切って分割する(形態素解析) 15m = MeCab.Tagger ("-Ochasen") 16chunks = m.parse(text).splitlines() 17 18sels = [] 19 20#絞り込み 21for chunk in chunks: 22 #chunk:形態素解析結果(1行の文字列) 23 #タブ(\t)で区切り、文字列リストを作成 24 cols = chunk.split('\t') 25 if len(cols) >= 4: 26 #parts[0]:品詞の種類 27 parts = cols[3].split('-') 28 #指定した品詞で始まっている場合 → true 29 if parts[0].startswith('名詞'): 30 #代名詞,非自立名詞,固有名詞,数を含めない 31 if parts[0].startswith('名詞') and parts[1] in ['代名詞','非自立','固有名詞','数']: 32 continue 33 #形態素を追加 34 #sels:形態素(原形)のみの行列 35 sels.append(cols[2]) 36 37#辞書作成 38dictionary = corpora.Dictionary([sels]) 39 40print(dictionary) 41 42#[辞書の単語数]次元のベクトルに変換(コーパス作成) 43corpus = [dictionary.doc2bow(sels)] 44 45""" 46print('corpus↓') 47print(corpus) 48""" 49 50t1 = time.time() 51 52#トピック数 53num_topics = 10 54 55#LDAモデルに投入 56lda = models.LdaModel(corpus = corpus, id2word = dictionary,num_topics = num_topics)
###質問
変数を用意し、ファイルを読み込む毎にインクリメントを行い、
[ファイル番号,そのファイルの中身]・・・①
もしくは
[ファイル番号,そのファイル番号のファイル名]・・・②
といった配列?辞書?のようなデータセットを作成すると
ファイル毎の情報の管理できるのではないかと思っています。
欲張りな相談になってしまうのですが、現在のプログラムとやりたいことを踏まえると、
①と②のどちらが良いなのか、
またどのように実装すれば良いのかアドバイスをいただきたいです。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/11/21 06:49