さて、形態要素解析の準備が整っても例文がなければ話にならない。
ということで、Wikipediaのabstract(概要)をコーパスに利用しようと思った。
Wikipediaデータベースダウンロードから
jawiki-20130216-abstract.xml 1.3 GB
をダウンロード
xmlの実際の中身はこんな感じ。

xmlを見てわかるようにabstractタグに概要が含まれている。そして、()の間によみがなや英字が書かれる。

DOMでの失敗

正直こんな初歩的な失敗をするのは私のようなアホだけだと思う。
私はまず次のように書いた。

abstractだけ取り出して、カッコを消去して一文ずつ並べる。
短いテストファイルで成功したのを確かめると、wikipediaの1.3GBあるxmlをぶち込んだ。

その結果……
ぎゃー
ふぇぇ、めもりいっぱいだよぉぉぉぉぉ

しかも実行が終わらない。
今まで、ここまで大きなxml扱ったことないから気にしたことなかった。
メモリ上に木構造でドンっと置かれてしまうから巨大なXMLはやばい。

lxml3.1.0を用いた解決

Pythonで巨大なxmlを処理する方法はいろいろと在るらしい。
結論から言うと、今回メモリの節約はできなかった。
だが、6分で解析仕切ることには成功した

今回はこちらを参考にしてlxmlを用いることにした。
逐次xmlを処理することができるようだ。

lxml3.1.0の導入

環境は
Windows7 64bit
Python3.3
ダウンロードはこちらから。
解凍先のINSTALL.txtには次のように書かれていた。

For **MS Windows**, we no longer provide binary distributions. Also
see the related FAQ entry _.
If you fail to build lxml on your MS Windows system from the signed
and tested sources that we release, consider using the unofficial
Windows binaries
_
that Christoph Gohlke generously provides.

簡単に言うと、
「Windows用のバイナリなんて提供しねーよ!自分でビルドできない情弱はここからダウンロードすれば?もちろん非公式だけどな!」
という感じ(だいぶ歪んでるが)。
なんというツンデレ。
一応nmakeで頑張ったんだよ(棒)
ということで64bit版のlxml-3.1.0.win-amd64-py3.3.exeをダウンロード。インストールするだけですぐに使えるようになりました。
至れり尽くせり。でも、もっとよくmake勉強しなきゃなぁ

lxml3.1.0+Python3.3

先ほど示した参考ページやその他のページを見て、コードを書いた。
初めに、サンプルコードを参考に、abstractタグを取り出すため次のように書いた。

しかしエラー発生
UnicodeDecodeError: ‘cp932′ codec can’t decode byte 0xef in position 0: illegal multibyte sequence
‘cp932′はPerlの標準出力でさんざん悩まされた、Windowsのコマンドラインの文字コード。
とりあえず文字コード周りを何とかしようと四苦八苦。
import codecs を使ってxmlを文字コード指定読み出ししてみる。

しかし今度は
TypeError: reading file objects must return bytes objects
というバイナリで渡してくださいよというエラー。

検索しても解決策が見えず、初心に戻ってlxmlのリリースに含まれるサンプルコードを見たところあっさり解決。

直接パスを渡せばいいのね。

そんな訳で、まだまだ改良が必要なWikipediaの概要を取り出すコード。

メモリ消費量が一向に減らないけれど、一応実行は終わるので使う分には問題ない。
有効な正規表現を考えなければ。

あと、処理前のxmlにlinkとか無駄な要素が多すぎるので、最初にただの文字列処理でサイズ落とせば軽くなるかも。


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

  プロフィール  PR:無料HP  安い 合宿免許  給与滞納  職業実践専門課程  カー用品の専門店  スタッドレスタイヤ 激安  タイヤ ストリーム 激安  東京 専門学校 就職  エンジンパーツ 中古部品  民泊 収入  業務用食材  株プロフェット 評判  タイヤ取付予約  シアリス 効果