joppot

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

mac unix

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

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

Pocket

NA00001860

概要

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

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

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

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

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

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

条件

mecabがインストールされている。

文章をダウンロードする

サンプル用の文章をダウンロードします。
http://www.aozora.gr.jp/cards/000148/card789.html
URLに飛び、
ページの一番下のzipファイルをダウンロードしましょう。

図書カード:吾輩は猫である_と_mecabで文章を分かち書きする_odt_-_OpenOffice_Writer-6

ダウンロードされたら、ダブルクリックで解凍しましょう。

ダウンロード-7

 

文字エンコーディングを変更する

このファイルはShift-JISの文字エンコーディングです。

mecabは初期設定でeucの文字エンコーディングを使用しています。

私の過去の記事を見るとわかる様に、私はUTF-8を使用しています。なので、このファイルをUTF-8に変換しましょう。

変換はnkfコマンドを使用しましょう。nkf の-wオプションでutf-8に変換してくれます。

nkf -w wagahaiwa_nekodearu.txt > nekodearu.txt

ダウンロード_—_bash

一応、別名のファイルに出力しました。

原文を編集する

正規表現ができるエディタを使用しましょう。
というのも、原文にはルビが入っていて、それを一括で削除するには正規表現をする必要があるからです。

私はCotEditorを使用します。フリーですし、便利なので、軽いエディタを持っていない人はこれを試してください。

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

nekodearu_txt-6

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

nekodearu_txt-5

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

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

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

Find-3

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

検索の所に、

《.+?》

と入力しましょう。

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

そしたら、「一括置換」を押して全て置換しましょう。
Find-5

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

 

mecabで分かち書きする

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

mecab -O wakati nekodearu.txt > wakati.txt

ダウンロード_—_bash 3

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

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

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

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

wakati_txt

文字化けし過ぎ。

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

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

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

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

wc nekodearu.txt

ダウンロード_—_bash 2

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

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

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

ダウンロード_—_bash 4

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

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

wakati_txt 2

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

 

まとめ

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

スポンサードリンク

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

-mac, unix
-,

執筆者:


comment

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

関連記事

ターミナルに奇麗な色をSolarizedで付ける(一般的な方法)

概要 重要なことなので最初に書いておきますが、marveriksではsolarizedの公式サイトで配布しているテーマの色がうまく反映されません。 2013年12月23日現在未だ不調です。 しかし、来 …

Mac OS Mavericksのテキスト音声入力を試す

概要 どうもみなさんこんにちわcandleです。今回は文字やテキストをキーボードから打ち込むのではなく、マイクから入力する方法を試したいと思います。 条件 OSがMavericksであること 音声拡張 …

macのemacs23,24でemmet(1.0.10)の補完の後にカーソルの位置がずれるのをデグレードして対処する

概要 みなさんこんにちはcandleです。今回はemacs23か24でemmetを使用した時に、カーソルの位置が行末になってしまう時の対処法を紹介します。 とは言っても、ソースコードをいじるわけではな …

MacにPlantUML環境をbrewを使って構築する

概要 みなさんこんにちはcandleです。 今回はUMLを簡単に作成できるplantUMLの環境をMacに構築したいと思います。 私はUML作成ツールはこれまで、starUMLを使っていましたが、どう …

mysqlデータベースのバックアップと復元(リストア)

概要 みなさんこんにはcandleです。今回はmysqlのバックアップとリストアを試してみましょう。 前回くらいに、様々なバックアップを試しましたが、それを問題なくリストア(復元)できなくては、意味な …

  • English
  • 日本語

プロフィール


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

スポンサードリンク

アーカイブ