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('([^<>]+)',s)
 if m: title = m.group(1)
 return title

# 始めの文章をabstractとして取得する
def get_abstract(s,title):
 abstract = ''
 m = re.search("('''{}'''.+)\n\n".format(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
 return (title,abstract)

# pageタグで切り出しながらファイルを読む
with open(file_name) as f:
 s = ''
 for l in f:
  if '' in l: s = ''
  elif '' in l:
   data = get_data(s)
   if data is not None: print(data)
  else: s += l
2019/04/16 20:56
タグ