いなばにっき

とある大学助手のだらだら日記

スポンサーサイト

いなばにっきはblog.1783.orgに引っ越しました。

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Wikipedia の XML データからリダイレクトの項目以外のものを出力する

いなばにっきはblog.1783.orgに引っ越しました。

作業めもめも。

#!/usr/bin/ruby

target = ARGV[0]

redirectFlag = false
buffer = String.new

fh = open(target)
fh.each { |line|
buffer += line

if /<comment>redirect<\/comment>/ =~ line
redirectFlag = true
end

if /<\/page>/ =~ line
print "#{buffer}\n" if redirectFlag == false
buffer = ""
redirectFlag = false
end
}


実行

./delredirect.rb jawiki-20070903-pages-articles.xml


全件対象にして、8分ほどで出力終了。


grep '<page>' noredirect.xml | wc -l

で調べてみると、774490件。おかしいな。動作確認用にWikipediaの小さなサンプルを作ってみるで確認したデータと見比べても件数が減っていなさすぎる。
むむぅ。要再検討だな。
スポンサーサイト

動作確認用にWikipediaの小さなサンプルを作ってみる

いなばにっきはblog.1783.orgに引っ越しました。

先に作ったデータはあまりにも数が少ないので、Wikipedia から適当な数のサンプルを生成する必要がありそう。
てことで、件数を指定すると、その数のサンプルを生成するスクリプトを準備しておくことに。

先日落としてきたWikipedia 日本語版の件数は、486,137件。ただし、リダイレクトやノートなどを含めると、1,205,158件。(2008/4/25時点)

念のため

grep "<page>" jawiki-20070903-pages-articles.xml | wc -l

で調べてみる

1分ほどで終了。776140 件。あれー。どっちの数とも違う。むむぅ。
てことは、手元のデータは、記事+リダイレクトとみていいんだろうか。
うーむ。

悩んでても仕方ないので、先に進む。

そんなに細かくやる必要もないので、ざっくりと等間隔抽出で。
一応、いくつかサンプルを作る可能性があるので、引数で「何件のサンプルを作るのか」をいじれるようにしておく。あと、今のところ、<page>の数は決め打ちだけど、今後のことを考えると、これも一度データをなめて動的に生成するほうがいいな。
出力時、前後に <mediawiki>~</mediawiki>を追加する。
出力先は標準出力にしているので、適宜リダイレクトしてファイルに落とす方向で。

ということで、<page>~</page>の範囲だけを、指定された数、ランダムに出力するスクリプト。

#!/usr/bin/ruby

limit = ARGV[0]
target = ARGV[1]

$stderr.print "#{target}から#{limit}件抽出します\n"

interval_tmp = 776140 / limit.to_i
interval = interval_tmp.round
$stderr.print "抽出間隔は #{interval} です\n"

srand
start = rand(interval)
$stderr.print "#{start} から始めます\n"

needles = Array.new

i=start
while i < 776140
needles.push(i)
i += interval
end

#puts needles

print "<mediawiki xmlns=\"http://www.mediawiki.org/xml/export-0.3/\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:schemaLocation=\"http://www.mediawiki.org/xml/export-0.3/ http://www.mediawiki.org/xml/export-0.3.xsd\" version=\"0.3\" xml:lang=\"ja\">\n"

flag = false
buffer = String.new

pageCounter = 0
fh = open(target)
fh.each{|line|
if /<page>/ =~ line
pageCounter += 1
if needles.include?(pageCounter)
flag = true
end
end

if flag == true
buffer += line
if /<\/page>/ =~ line
print "#{buffer}\n"
flag = false
buffer = ""
end
end
}
print "</mediawiki>\n";
fh.close


ざっくり100件回してみて2分くらい。1000件だと3分。10000件だと20分くらい。

これでようやくサンプルができたので、このサンプルから、いよいよプレーンテキスト化を本格的に考える。はず。

Wikipedia のデータをテキストファイルにするメモ(2)

いなばにっきはblog.1783.orgに引っ越しました。

いろいろあって、結局自前で ruby でやってみることにしてみる。

・欲しいのは、タイトルと本文部分だけ。
・text の中身の整形については別途考える


#!/usr/bin/ruby
require "rexml/document"
require "iconv"
$KCODE="UTF-8"

source = ARGV[0]
xml = REXML::Document.new(File.open(source))


みたいなかんじでとりあえず読み込んでみるだけのテスト。


一時間経過…。

ぐは。読み込みだけなのに時間かかってしょうがねぇ。
とりあえず小さなサンプルデータを作ってみる。

サンプルデータでは成功。
んでもって、テキストとタイトルを抜き出してみるテスト。


#!/usr/bin/ruby
require "rexml/document"
require "iconv"
$KCODE="UTF-8"

source = ARGV[0]
xml = REXML::Document.new(File.open(source))
xml.elements.each("mediawiki/page"){|page|
title = page.text("title")
text = page.text("revision/text")
print "#{title}\n#{text}\n"
}

ばっちおっけー。

さらに、Wikipedia のモノホンデータの最初と最後をくっつけたサンプルデータ(モノホン風味)を作成して、同じスクリプトで回してみる。

さらにおっけー。

あとやるべきこと。
・文書番号ナンバリング
・タイトルと文書番号を関連付けたTSVファイル生成
・文書番号をファイル名としてテキスト部分を出力
・(余裕があれば)ディレクトリを掘る
・(さらに余裕があれば)文書数を見て、ナンバリングの桁数とディレクトリの深さを自動決定

Wikipedia のデータをテキストファイルにするメモ(1)

いなばにっきはblog.1783.orgに引っ越しました。

研究用のサンプルデータとして、とりあえず Wikipedia 日本語版を考えています。
現状、Wikipedia のデータは Wikipedia:データベースダウンロードにあるように、http://download.wikimedia.org/jawiki/ から入手できます。

このデータは、圧縮された巨大な XML データなんですが、全文検索のサンプルにすることを考えると、プレーンテキストになっている方が扱いやすい。てことで、同志社大学言語文化教育研究センターの長谷部 陽一郎先生が書かれた WP2TXTを使う予定です。

ちょっと今日時間が取れるか微妙なので、場合によっては明日に続く、かも。

Hyper Estraier on CentOS 5

いなばにっきはblog.1783.orgに引っ越しました。

全文検索の研究用に、テストサーバに Hyper Estraier をインストール。
テストデータを入手したらいろいろ試してみなくっちゃ。

とりあえずインストール手順(書くほどでもないけど)。


cd /usr/src
wget http://qdbm.sourceforge.net/qdbm-1.8.77.tar.gz
tar zxvf qdbm-1.8.77.tar.gz
cd qdbm-1.8.77
./configure
make
make install



cd /usr/src
wget http://hyperestraier.sourceforge.net/hyperestraier-1.4.13.tar.gz
tar zxvf hyperestraier-1.4.13.tar.gz
cd hyperestraier-1.4.13
./configure
make
make install



cd /var/www/cgi-bin
cp /usr/local/libexec/estseek.cgi ./
cp /usr/local/share/hyperestraier/estseek.* ./

Top

HOME

いなば

Author:いなば
とある私立大学のダラダラ助手。
機械には人格があると信じて疑わない。
最近、体脂肪率がすこ~し下がってとってもうれしい。

あわせて読みたい

にほんブログ村 教育ブログ 大学教育へ

ネットショップチャットレディSEO対策SEO誕生日プレゼントパワーストーン自動車

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。