概要
みなさんこんにちはcandleです。今回は「分かち書き」をしてみましょう。
分かち書きというのは文章を品詞毎に分ける事です。品詞とは名詞や動詞などのことです。
ちょっとみてみましょうか。
「私はcandleという名前の技術者である。」というのを品詞毎にわけると、下の図の様になります。
名詞とか助詞とかに分かれているでしょ。
これをスペース区切りにしたのか分かち書きです。
条件
- mecabコマンドがインストールされている。
文章をダウンロードする
サンプル用の文章をダウンロードします。
http://www.aozora.gr.jp/cards/000148/card789.html
URLに飛び、
ページの一番下のzipファイルをダウンロードしましょう。
ダウンロードされたら、ダブルクリックで解凍しましょう。
文字エンコーディングを変更する
このファイルはShift-JISの文字エンコーディングです。
mecabは初期設定でeucの文字エンコーディングを使用しています。
ただ、最近はUTF-8が多く使われているので、このファイルもUTF-8に変換しましょう。
変換はnkfコマンドを使用しましょう。nkf の-wオプションでutf-8に変換してくれます。
nkf -w wagahaiwa_nekodearu.txt > nekodearu.txt
別名のファイルに出力しました。
原文を編集する
正規表現ができるエディタを使用しましょう。
というのも、原文にはルビが入っていて、それを一括で削除するには正規表現をする必要があるからです。
私はCotEditorを使用します。フリーですし、便利なので、軽いエディタを持っていない人はこれを試してください。
まずは文章の一番上の説明文を削除しましょう。
次に、文章の一番下に移動して、書籍のデータを削除しましょう。
次に正規表現を使用して、ルビを消します。
CotEditorならコマンド+F で検索ボックスを表示します。
「正規表現」のチェックボックスにチェックを入れてください。
この文章のルビは全部《》の中に書かれているので、それに対して正規表現を行いましょう。
検索の所に、
と入力しましょう。
置換の場所には何も書かなくてかまいません。
そしたら、「一括置換」を押して全て置換し、ルビを消しましょう。
保存して原文の編集は終わりです。
mecabで分かち書きする
ここまでくれば簡単です。先ほどの編集したファイルに対して次のコマンドを打ちましょう。
mecab -O wakati nekodearu.txt > wakati.txt
ところが、overflowが沢山出ます。
出ない人は成功だと思います。
でも、多分これぐらい長いファイルだとほとんどの人がこの問題に突き当たるでしょう。
試しにできたwakati.txtのファイルを開きます。
文字化けし過ぎ。
ということで、警告にもあるように -bオプションで splitうんたらをしましょう。
実際問題これは詳しい事はわからないし、あくまで私の予想なのですが、mecabの処理できる容量よりも大きいデータがきたから分けて処理しろということじゃないでしょうか?
となれば、ひとまず原文ファイルの大きさを調べましょう。
wcコマンドで大きさを調べます。
wc nekodearu.txt
私の場合は「978121」バイトと出ました。
これをmecabの-bオプションの後につければ、問題なく動くと思います。
やってみましょう。
mecab -O wakati -b 978121 nekodearu.txt > wakati.txt
今度はとくに警告も無く、処理が完了しました。
ファイルを開いてみましょう。
今度は奇麗に分かち書きできました。
成功です。ファイルのサイズが文字だけで、1.2Mバイトになっていますね。
まとめ
これだけだと、何がしたいんだかわからないと思います。確かにその通りです。
1つの可能性として、よく行われるのが、名詞だけを取り出して、データベースにおさめるというのもです。このデータも、今後何かに使えると思います。大切にしましょう。