###やりたいこと
複数のテキストファイルを入力とし、指定したトピック数に分類するプログラムを作成したいと考えています。
現在、一つのテキストファイルをLDAモデルに投入するプログラムは実装することができたのですが、複数のテキストファイルを入力とする方法が分かりません。
例えば、指定したディレクトリ内にあるテキストファイルを入力として、
10個のトピックに分類するとします。
各テキストファイルにはジャンルのタグを付与しておいて分類に同じタグのファイルが
同じような分類にされているのかをチェックできるようにしたいです。
以下に現在実装中のコードを記します。
python3
1#!/usr/bin/env python3 2# -*- coding: utf-8 -*- 3 4 5import time 6import MeCab 7from gensim import corpora, models, similarities 8from xlwt import Workbook 9 10#ファイル指定 11doc = input('select file(ex, ○○.txt):') 12t0 = time.time() 13f = open(doc, "r",encoding = "utf-8") 14text = f.read() 15f.close() 16 17#文字列を改行位置で区切って分割する(形態素解析) 18m = MeCab.Tagger ("-Ochasen") 19chunks = m.parse(text).splitlines() 20 21#絞り結果を格納 22sels = [] 23 24#絞り込み 25for chunk in chunks: 26 #chunk:形態素解析結果(1行の文字列) 27 #タブ(\t)で区切り、文字列リストを作成 28 cols = chunk.split('\t') 29 if len(cols) >= 4: 30 #parts[0]:品詞の種類 31 parts = cols[3].split('-') 32 #指定した品詞で始まっている場合 → 真 33 if parts[0].startswith('名詞') or parts[0].startswith('動詞'): 34 #要素(形態素)を追加 35 #sels:要素(形態素)のみの行列 36 sels.append(chunk[0]) 37 38#辞書作成 39dictionary = corpora.Dictionary([sels]) 40""" 41#単語の出現回数が1以下を除く 42dictionary.filter_extremes(no_below = 1) 43""" 44 45#[辞書の単語数]次元のベクトルに変換(コーパス作成) 46corpus = [dictionary.doc2bow(sels) for sel in sels] 47 48t1 = time.time() 49#LDAモデルに投入 50lda = models.LdaModel(corpus = corpus, id2word = dictionary, 51 #トピック数:5 52 num_topics = 5) 53t2 = time.time() 54print(lda) 55 56 57#各トピックにおける各トークンの出現確率を係数で表示 58for topic in lda.show_topics(-1): 59 print(topic) 60 61""" 62#文書の推定トピック番号 , 推定の確信度を表示 63for topics_per_document in lda[corpus]: 64 print(topics_per_document) 65""" 66 67lda_time = t2 -t1 68print('LDAモデル生成時間:%f秒'%lda_time) 69 70total_time = t2 - t0 71print('合計時間:%f秒'%total_time)
まとめると、やりたいと思っているのは
①テキストファイルにタグを付ける
②複数のテキストファイル(1つのディレクトリ内)を同時に入力とする
この2つです。
できれば2つとも意見をいただきたいのですが、
①か②どちらか片方についてのご意見、またその他の部分についてのご意見
でも非常にありがたいです。
###実行環境
OS:ubuntsu
言語:python3
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。