Wikipediaのダンプファイルからタイトルと概要を抽出する

Wikipediaはデータベース・ダンプを提供している。
Abstractをまとめたjawiki-latest-abstract.xml.gzも配布しているが、このデータは使いものにならない…w
そこでjawiki-latest-pages-articles.xml.bz2を使う。
このファイルをbunzip2コマンドで展開するとjawiki-latest-pages-articles.xmlを得る。
なお、展開したファイルのサイズは10GBを超えるため、ストレージの容量に注意する。
次のコードはjawiki-latest-pages-articles.xmlから有効なtitleとabstractを表示する。
#coding: UTF-8

import sys
import re

# 読み込むファイルの名前を指定する
file_name = 'jawiki-latest-pages-articles.xml';

# タグを削除する
def strip_tags(s):
 return re.sub('<[^<>]*?>','',s)

# titleを取得する
def get_title(s):
 title = ''
 m = re.search('<title>([^<>]+)</title>',s)
 if m: title = m.group(1)
 return title

# 始めの文章をabstractとして取得する
def get_abstract(s,title):
 abstract = ''
 m = re.search("('''%s'''.+)\n\n"%re.escape(title),s)
 if m: abstract = m.group(1)
 return abstract

# titleとabstractを表示する
def get_data(s):
 title = get_title(s)
 if title=='': return
 abstract = get_abstract(s,title)
 if abstract=='': return
 print("{}\t{}".format(title,abstract))

# pageタグで切り出しながらファイルを読む
with open(file_name) as f:
 s = ''
 for l in f:
  if '<page>' in l: s = ''
  elif '</page>' in l: get_data(s)
  else: s += l
2019/04/16 20:56
Pythonについて他にもなんか書いてます。
タグ