Wikipediaのリダイレクト一覧を言い換えリスト化
Wikipediaデータベース日本語版のjawiki-latest-stub-articles.xml.gz(pages-articles.xmlの本文を除いた版)から記事IDと記事タイトルを取得して, その情報をもとにjawiki-latest-redirect.sql.gz(リダイレクト先一覧)のリダイレクト元記事IDを記事タイトルに置換して読みやすくするスクリプトを書きました。
出力結果からゴミデータを除けば、同義語辞書、あるいは言い換えリストに加えることができるかもしれません。
# -*- coding: utf-8 -*- # Wikipediaの記事id-titleペア情報を使ってリダイレクト一覧を見やすくする # # jawiki-latest-stub-articles.xmlから記事id-titleペア情報を取得し, # リダイレクト一覧のリダイレクト元記事idを記事titleに書き換える import re re_tag_extract = re.compile('>(.*)</') re_parentheses_extract = re.compile("\(([0-9]+,[0-9]+,[^,]+,[^,]+,\'[^\']*\')\)") # jawiki-latest-stub-articles.xmlから記事idとtitleの辞書を生成 """ jawiki-latest-stub-articles.xmlの内容例 <page> <title>哲学</title> <id>110</id> <revision> <id>28432395</id> <timestamp>2009-10-11T11:11:19Z</timestamp> <contributor> <ip>202.95.44.163</ip> </contributor> <comment>/* 外部リンク */ [[Wikipedia:外部リンクの選び方]]参照</comment> <text id="28286198" /> </revision> </page> """ title_flag = False id2title = {} with open('jawiki-latest-stub-articles.xml','r') as wiki_stub_articles: for line in wiki_stub_articles: if '<title>' in line: title = ''.join(re_tag_extract.findall(line)) title_flag = True elif '<id>' in line: if title_flag: wikiid = ''.join(re_tag_extract.findall(line)) id2title[wikiid] = title title_flag = False # jawiki-latest-redirect.sqlからデータを抽出 """ jawiki-latest-redirect.sql内容例 (407868,0,'色空間','','') """ with open('jawiki-latest-redirect.sql','r') as wiki_redirect: redirects = re_parentheses_extract.findall(wiki_redirect.read()) # リダイレクトデータの記事idを記事タイトルに置き換える """ 置換例 X.v.Color,0,'色空間','','' """ result = [] for redirect in redirects: columns = redirect.split(',') if id2title.has_key(columns[0]): columns[0] = id2title.pop(columns[0]) result.append(','.join(columns)) # wikisynonym.csvに結果を書き込む with open('wikisynonym.csv','w') as wikisynonym: wikisynonym.write('\n'.join(result))