前置き
前回の記事からの続きです。
Wikipediaのファイルをスクリプトから処理可能なサイズに分割し、Elasticsearchのセットアップ作業を終えている前提で話を進めます。
ファイル整形
前回は、230万件のWikipediaの記事を1000件単位に分割してファイルに納めるということをしました。 まず、先頭ファイルと最終ファイルにそれぞれXMLの開始/終了がくっついているので、これを切り出します。これくらい開発するよりエディタでやったほうが絶対に早いんだけれども、乗り掛かった舟なのでコードにしました。
XMLオブジェクト生成
では、生成したファイルからXMLファイルを合成し、XMLオブジェクトへ変換しましょう。
最終的にこれを0~2300のファイルに実行するイメージです。Pageは[0]~[999]です。
※未検証ですが、オフラインだとスキーマにアクセスできないのでXMLの生成に失敗すると思われます。
その場合にはスキーマをローカルにダウンロードしてヘッダをローカル参照に書き換えてください。
投入データ選定
まず、Elasticsearchへの取り込み対象を絞りましょう。
- page/id
- page/revision/timestamp
- page/title
- page/revision/text."#text"
では試してみましょう。
それっぽい出力ができました。これを取り込めばよさそうです。
Wiki記法が気になりますが、恐らくSTOPWORDというElasticsearchの機能でなんとかなるんじゃないかと楽観視しているので、一旦編集処理はしません。
もし必要なら$Row.textを文字列置換とかでいい感じに編集するようにしてみてください。
設定ファイル生成
先日の記事でもやりましたが、まずはアップロードするファイルをElasticsearchに納めるうえで、Mappingの定義ファイルを作成します。
まず、先ほど作成した変数$Tableから5件Elasticsearchに登録します。
では、このMAPファイルを編集していきましょう。データ型は以下のページを参考にします。
https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-types.html
更にKuromojiを利用するための設定として以下のページの内容も組み込みます。 https://www.elastic.co/guide/en/elasticsearch/plugins/current/analysis-kuromoji-tokenizer.html
textフィールドの謎指定「fielddata」「store」は何かうまく動かなかったので以下を参考に指定してみた的なおまじないです。時間がある時に何者でどんな効果が期待できるのか調べたいです。よくわかってないので一旦ぶん投げておきます。
https://qiita.com/tsgkdt/items/9ac7c8ffd74e2baee79d
では既存Indexを削除してこの定義を取り込んでみましょう。
取り込みエラーが出なかったら即座に確認です。
N-Gramではなく、Kuromojiが適用されていそうです。なお、確認方法は以下のページを参考にしました。
http://pppurple.hatenablog.com/entry/2017/05/28/141143
つまりここでKuromojiを指定しなければ、N-Gramされてしまうのですね。単語間にスペースのついてない言語って英語圏の人たちは頭を抱えたくなるのでしょうか。
あとはデータを投入する処理で完了という感じですが、長くなったので次回に持ち越しです。いいところで続くって続きが楽しみになりませんか。
0 件のコメント:
コメントを投稿