joppot

コピペで絶対動く。説明を妥協しない

mac unix

mecabで文章を分かち書きする

投稿日:2014年1月31日 更新日:


NA00001860

概要

みなさんこんにちはcandleです。今回は「分かち書き」をしてみましょう。

分かち書きというのは文章を品詞毎に分ける事です。品詞とは名詞や動詞などのことです。

ちょっとみてみましょうか。

「私はcandleという名前の技術者である。」というのを品詞毎にわけると、下の図の様になります。

candle_—_mecab

名詞とか助詞とかに分かれているでしょ。

これをスペース区切りにしたのか分かち書きです。

条件

  1. 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を使用します。フリーですし、便利なので、軽いエディタを持っていない人はこれを試してください。

まずは文章の一番上の説明文を削除しましょう。

nekodearu_txt-6

次に、文章の一番下に移動して、書籍のデータを削除しましょう。

nekodearu_txt-5

次に正規表現を使用して、ルビを消します。

CotEditorならコマンド+F で検索ボックスを表示します。

「正規表現」のチェックボックスにチェックを入れてください。

Find-3

この文章のルビは全部《》の中に書かれているので、それに対して正規表現を行いましょう。

検索の所に、

《.+?》

と入力しましょう。

置換の場所には何も書かなくてかまいません。

そしたら、「一括置換」を押して全て置換し、ルビを消しましょう。

Find-5

保存して原文の編集は終わりです。

mecabで分かち書きする

ここまでくれば簡単です。先ほどの編集したファイルに対して次のコマンドを打ちましょう。

mecab -O wakati nekodearu.txt > wakati.txt

ところが、overflowが沢山出ます。

出ない人は成功だと思います。

でも、多分これぐらい長いファイルだとほとんどの人がこの問題に突き当たるでしょう。

試しにできたwakati.txtのファイルを開きます。

wakati_txt

文字化けし過ぎ。

ということで、警告にもあるように -bオプションで splitうんたらをしましょう。

実際問題これは詳しい事はわからないし、あくまで私の予想なのですが、mecabの処理できる容量よりも大きいデータがきたから分けて処理しろということじゃないでしょうか?

となれば、ひとまず原文ファイルの大きさを調べましょう。

wcコマンドで大きさを調べます。

wc nekodearu.txt

私の場合は「978121」バイトと出ました。

これをmecabの-bオプションの後につければ、問題なく動くと思います。
やってみましょう。

mecab -O wakati -b 978121 nekodearu.txt > wakati.txt

今度はとくに警告も無く、処理が完了しました。

ファイルを開いてみましょう。

wakati_txt 2

今度は奇麗に分かち書きできました。
成功です。ファイルのサイズが文字だけで、1.2Mバイトになっていますね。

まとめ

これだけだと、何がしたいんだかわからないと思います。確かにその通りです。
1つの可能性として、よく行われるのが、名詞だけを取り出して、データベースにおさめるというのもです。このデータも、今後何かに使えると思います。大切にしましょう。

スポンサードリンク

「為になったなぁ」と思ったら、シェアお願いします。

-mac, unix
-,

執筆者:


comment

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

関連記事

Mac OS X Mavericks にruby on rails4の環境を構築する

概要 みなさんこんにちはcandleです。今回はruby on railsの永遠のテーマ環境構築と環境設定をやっていきましょう。 ruby on railsは近頃のwebアプリケーションではよく使われ …

Mac Yosemiteを購入したので、よく使うソフトウェアをインストールする

概要 みなさんこんにちはcandleです。 今回は私がよく使っているソフトウェアの紹介をします。主に「文章、ブログ、プログラミング、デザイン」に関わっている人に向けてになります。 Skitch1.0. …

macターミナルのウィンドタイトルとタブ名を変更する

概要 みなさんこんにちはcandleです。 ターミナルのウィンドタイトルとタブ名を変更する企画をやっていきたいと思います。 ウィンドタイトルというのは何処かというと下の画像の部分になります。タブ名もそ …

cdとlsを合体させて移動したら中身を表示する

概要 みなさんこんにちわ candleです。今回はcdとlsを組み合わせて、移動する度に中身を表示する方法を試してみましょう。そもそも、なぜこんなことにニーズがあるかというと、cdしてディレクトリを移 …

最高に見やすいターミナルのフォントを選ぶ

概要 みなさんこんにちはcandleです。 今回は最高に見やすいターミナルのフォントと題し、解説していきたいと思います。 フォントを選ぶことは人生を選ぶくらい大事なことなのはお分かりだと思います。 プ …

  • English
  • 日本語

ベンチャー企業のCTOをやってます。大学時代にプログラミングを始め、javaから入門し、C++へて、PHPへと進み、会社ではRailsを使用。自動化が大好きなプログラマー