いなばにっき

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

スポンサーサイト

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

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

動作確認用に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ファイル生成
・文書番号をファイル名としてテキスト部分を出力
・(余裕があれば)ディレクトリを掘る
・(さらに余裕があれば)文書数を見て、ナンバリングの桁数とディレクトリの深さを自動決定

Top

HOME

いなば

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

あわせて読みたい

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

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

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