必要な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の教本 人気講師が教える基礎からサーバサイド開発まで (「いちばんやさしい教本」シリーズ)

いちばんやさしいPythonの教本 人気講師が教える基礎からサーバサイド開発まで (「いちばんやさしい教本」シリーズ)

みんなのPython 第4版

みんなのPython 第4版