###やりたいこと
urllibとBeautifulSoup4に詳しい方に質問です。
複数のテキストファイルからLDAモデル作成するプログラムを実装しています。
実装中のプログラムではテキストファイルをまとめておいたディレクトリにアクセスし、
その中の.txtファイルを入力としているのですが、
urllib,BeautifulSoup4を使って
青空文庫からテキストファイルと
そのテキストファイルのカテゴリ(サイト内の分野別リストに記されているもの)
例:「小説.物語」,「評論.エッセイ.随筆」など
の情報を取得し、
[ファイル名,カテゴリ]というようなリストを作成できるように変更したいので、
どのように変更するべきなのかを教えていただきたいです。。
実装中の部分と今後実装する予定の部分が混在していて見辛いかと思いますが
よろしくお願いします。
###実装中のプログラム
python
1#!/usr/bin/env python3 2# -*- coding: utf-8 -*- 3 4""" 5トピックモデル(入力:青空文庫の.txtファイル) 6各ファイルの管理可能 7形態素解析対象:名詞(代名詞,非自立名詞,数,固有名詞を除く) 8""" 9import time 10import glob 11import urllib.request 12from bs4 import BeautifulSoup 13import MeCab 14from gensim import corpora, models 15 16t0 = time.time() 17 18html = urllib.request.urlopen('http://www.aozora.gr.jp/') 19soup = BeautifulSoup(html) 20 21""" 22file_list[file_no]:ファイル番号file_noのファイル名 23""" 24file_list = glob.glob('novel_set/*.txt') 25 26#形態素解析(文字列を改行位置で区切って分割) 27mecab = MeCab.Tagger ("-Ochasen") 28 29texts = [] 30for file in file_list: 31 f = open(file, "r",encoding = "utf-8") 32 text = f.read() 33 f.close() 34 chunks = mecab.parse(text).splitlines() 35 36 #絞り込み 37 sels = [] 38 for chunk in chunks: 39 cols = chunk.split('\t') 40 if len(cols) >= 4: 41 parts = cols[3].split('-') 42 #指定した品詞で始まっている場合 → true 43 if parts[0].startswith('名詞'): 44 #代名詞,非自立名詞,固有名詞,数を含めない 45 if parts[1] in ['代名詞','非自立','固有名詞','数']: 46 continue 47 #形態素を追加 48 #sels:形態素(原形)のみの行列 49 sels.append(cols[2]) 50 texts.append(sels) 51 52dictionary = corpora.Dictionary(texts) 53corpus = [dictionary.doc2bow(text) for text in texts] 54 55t1 = time.time() 56 57#トピック数 58num_topics = 10 59 60#LDAモデルに投入 61lda = models.LdaModel(corpus = corpus, id2word = dictionary,num_topics = num_topics) 62 63t2 = time.time() 64 65print(lda) 66 67#各トピックにおける各トークンの出現確率を係数で表示 68for topic in lda.show_topics(-1): 69 print(topic) 70 71corpus_time = t1 - t0 72print('コーパス生成時間:%f秒'%corpus_time) 73 74lda_time = t2 -t1 75print('LDAモデル生成時間:%f秒'%lda_time) 76 77total_time = t2 - t0 78print('合計時間:%f秒'%total_time)
###補足情報
BeautifulSoup4ではURLを扱えない?らしいので最初に見つけたurllibを使っているのですが、Seleniumなどもあるそうで、どちらをつかうのがよいか(それぞれの特徴など)
もアドバイスをいただければと思います。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/11/30 09:40
2017/11/30 11:02