先に作ったデータはあまりにも数が少ないので、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分くらい。
これでようやくサンプルができたので、このサンプルから、いよいよプレーンテキスト化を本格的に考える。はず。
最近のコメント