必要なWikipediaの項目から本文を抽出する
Python勉強開始から20日が経過。
『みんなのPython』を必要な箇所をひとまず終えたので、Wikipediaのデータ加工に取り組む。
手順
- テキストデータが膨大なので、”doc id”(Wikipediaの項目ごとに与えられるID)と”タイトル”だけを抽出したインデックスを作る。
- インデックスから「~の人物一覧」というワードを含む項目を抽出すると、"doc id"のリストとなる。
- 元データと”doc id”を照合し、必要な項目の本文を引っ張ってくる。
大きく分けて2つのステップがあるが、仕組みとしてはかなり似ている。元となるデータから項目タイトルだけを抽出しインデックス化するコードを書く。それを改造し、”doc id”のリストを読み込ませ、元データから一致する”doc id”本文を引っ張ってくる。
コード(一部のみ)
"list_text" がWikipediaのデータをPython上で読み込んで list に格納したもの。
"id_list" はタイトルに「~の人物一覧」というワードを含む項目の"doc id"リスト。
ステップごとに分割しているので、ひとまとまりにはなっていない。
Pythonの場合、個々のブロックをモジュールとして読み込ませれば、まとめられるはずだが試していない。
#定義ブロック、引数 id を与えると、リスト list_text からWikipediaの本文を呼び出す def search_id(id): newlist=[] for l in list_text: if str(id) in l: #引数 id をstr型に変換しリスト l と照合 return l #IDのリストを元に、必要な要素を抽出し result に格納 result =[] for i in id_list: s = search_id(i) result.append(s) #リストを結合し書き込み用の文字列へ save_s = ",".join(map(str,result)) #出力を保存 f_out = open("./test/result.txt","w","utf-8") f_out.write(save_s) f_out.close()
反省と課題
- for 文をいっぱい書いた。内包表記が処理速度が速くて簡潔だというがまだ荷が重い。
- "doc id"をkey に"本文"をvalue にした辞書ならもっと高速化出来るのではないか。
- ステップごとに一旦txtに書き出し、書き出したものを読み込ませるという風に組んでいる。動作確認がやりやすいが、エンコードの問題でエラーが出る。codecs のimport で一応解決したが、都度書き出しは止めたい。
一旦、Wikipediaデータの加工はここまでにして、再び座学に戻る。
次のテキストは『いちばんやさしいPythonの教本』
いちばんやさしいPythonの教本 人気講師が教える基礎からサーバサイド開発まで (「いちばんやさしい教本」シリーズ)
- 作者: 鈴木たかのり,杉谷弥月,株式会社ビープラウド
- 出版社/メーカー: インプレス
- 発売日: 2017/08/10
- メディア: 単行本(ソフトカバー)
- この商品を含むブログを見る
- 作者: 柴田淳
- 出版社/メーカー: SBクリエイティブ
- 発売日: 2016/12/22
- メディア: 単行本
- この商品を含むブログ (2件) を見る