Hatena::ブログ(Diary)

=== SANDmark 19106 === beginning stress test このページをアンテナに追加 RSSフィード

2016年01月19日 [Windows][Ruby]natto gemで形態素解析をする!(Windows7 64bit編)

natto gemで形態素解析をする!(Windows7 64bit編)

あけましてから結構な日数が経ちましたが、去年どころか一昨年のご挨拶さえしたかどうか定かではない今日このごろ。皆さんお久しぶりです。いいえむしろ初めまして sandmark です。もともと定期購読してお得なブログを目指したわけでもなく、その場しのぎのナマモノ情報をお届けしているわけでして、本年もこんな自堕落な調子で過ごしていきたいと思います。

恋するプログラム

さて、先日こんな本を見つけました。
恋するプログラム―Rubyでつくる人工無脳

2005年出版かつWindowsベースの解説なので、ruby-1.8系のstableが出るか出ないかの時代ですね。RubyGemsさえないという。そんな中でよくGUIインターフェイスの実装まで解説したなぁと思って感心しているのですが、ライブラリ処理系の時代背景はともかく非常によくできた構成で、「これを機にRubyでWindowsアプリケーション開発しよう」と読者に奮起させる意図もあったのかな、と思います。当時はRubyもまだマイナーで、GUIアプリケーションといえばVisual C++デファクトスタンダードだったわけですし(今でも実質そうなんだけど)。それでも最近はQtGTKラッパーライブラリ経由で使ったり、.NETがいろいろ進化してたり、当時に比べればかなり敷居は低くなったんじゃないかなと思います。では本書のGUI解説がまったくの役立たずかというとそうでもなくて、コアライブラリと完全に分離されているため、GUI無しでもそのまま読み進められます。むしろ「ライブラリをどのように分離するか」の説明に重きを置いているので、プログラミング or Ruby初心者向けでもあります。テーマもなかなか魅力的……っていうかそれが目的で買ったんですが、人工無能の開発イディオムを1から解説してくれる書籍もあまり見つけられないので、個人的には☆5つ付けたいくらいの良書です。

libmecab.dllの64bit版がなかった

読み進めてきたところで、これ系のプログラムには必須とも言える形態素解析が必要になりました。本書では茶筅(ChaSen)FFI経由で利用する手法が採用されていましたが、私の開発環境はUbuntuなので、できればgemでなんとかしたい。というかプラットフォーム依存のコードにしたくなかったので「ruby 形態素解析」でぐぐった結果、どうもMeCab: Yet Another Part-of-Speech and Morphological Analyzerを使うのが王道な感じで、natto gemから叩くのが良さそう。

だったのですが、MeCabのWindowsバイナリは32bit版しか提供されておらず、他の言語用のバイナリをnattoから読もうとするとエラーが頻出したので、もう諦めて自前でビルドしました。他の方に倣って置いておきます。

64bit版libmecab.dll (See also: no title)
libmecab_X64.zip - Google ドライブ

%MeCabをインストールしたディレクトリ%/bin/にあるファイルをバックアップしておいて、上記バイナリを放り込んでください。これでrequire 'natto'戻り値trueなら大丈夫です。それでもダメなら環境変数MECAB_PATH=C:\Path\To\libmecab.dllを設定してみましょう。

文字コードのお化け

Windowsのコマンドプロンプトで実行すると、 natto は自動的にShift_JISでMeCabに渡すっぽいです。MeCab辞書をUTF-8でインストールしている場合、

require 'natto'

Encoding.default_external = 'UTF-8'

nm = Natto::MeCab.new
puts nm.parse(readline.chomp)

とかやるととっても文字化けるので、よくわからんちんな私のような人はMeCab辞書をあらかじめShift_JISでインストールしておくといいと思います。

require 'natto'

nm = Natto::MeCab.new
charset = nm.dicts.first.charset
encoding = (charset == 'SHIFT-JIS') ? 'Shift_JIS' : charset

puts nm.parse(readline.chomp.encode(encoding)).encode('UTF-8')

こんな感じでうまいことやってくれます。もっと良い方法があったら教えて下さい。

それではー。

2012年04月14日

MBRを上書きしてしまったときにgrubを修復する

久々のエントリ。
今回、UbuntuインストールされているマシンにWindows7をインストールして
その際MBRが上書きされてしまったんで、修復方法をメモっておきます。

パーティション構成:

  • /dev/sda1: NTFS (Windows 7)
  • /dev/sda2: ext4 (Ubuntu 11.10)
  • /dev/sda3: NTFS (予備)
  • /dev/sda4: ext4 (予備)

使用したのは Ubuntu 11.10 のインストールCD。
CD起動時のメニューで [F6] を押して(押さなくてもいいかも)
ブートオプションを表示し、

file=/cdrom/preseed/ubuntu.seed boot=casper initrd=/casper/initrd.gz

というようになっているところの boot=casper
root=/dev/sda2 (Ubuntuがインストールされているパーティション)に変更します。

で、「インストールされているUbuntuを起動」とかした気がする。
するとハードディスク(/dev/sda2)のUbuntuが起動するので、
rootユーザになって(あるいはsudoで)grubを再インストールしてやります。

# update-grub
# grub-install

おしまい。
update-grub が自動的に他のOSを見つけてgrub.cfgをいじくってくれるので、
Windows7も自動的に認識され、ブートされるようになりました。

もちろん、MBRを書き換えるための grub-install も忘れずに。
これでもう何も恐くないですね。

2012年04月11日

ひとりごと on 2012-04-11

ついったからno title経由で自動投稿されてます。


  • 09:55  おきたじぇ。ここ数日の睡眠時間を考えると妥当な時刻ネ。  #

  • 11:49  どうもうちのドライブではDVD-Rが焼けないらしい。対応はしてるみたいだけどぶっ壊れてるくさい  #

  • 11:50  さてredmineでも導入してみる  #

  • 12:06  独りでのんびり開発するのに果たしてRedmineが必要だろうか、という疑問を無視してnginx+redmine構築してみた  #

  • 12:07  でもTiDD的にはTodo.txtで間に合っている(いちいちブラウザでチケット確認したくない)というね  #

  • 12:08  「ただ使ってみたかった」という好奇心で自らを殺すのだろうか…  #

  • 12:09  欲しいものがたくさんあるなぁ…Rails本にDSL本にScala本に新しいDVDドライブにWindows7  #

  • 12:10  3万くらい軽くトぶ  #

  • 12:10  あぁ、古事記の中つ巻と下つ巻もだ  #

  • 12:47  訃報: 青野武さん死去 | スラッシュドット・ジャパン http://t.co/PUIhs9B1 とあるラジオで「(アフレコで)失敗は許されない。昔は誰かが一度でもミスをしたら、最初から全部撮り直しだった。今でこそやり直しは効くが、その分、それに甘えている声優が多いのではないか」  #

  • 12:50  そんな趣旨のことを青野さんは仰っていました。「最近の若者は…」ということでは決してなくて、ひたむきさや、背負っている責任の重さを、声優という職業に限らず叱咤されたような気がして、そのときから青野さんは、ボクの中で尊敬できる方の一人となっていました。  #

  • 12:52  惜しい方を亡くした、という言葉では表現しきれない喪失感があります。「みんなのお父さん」がいなくなってしまった。そんなふうに感じます。この場で改めて追悼の意を表します。ありがとうございました。お疲れ様でした。  #

  • 13:03  個人的にタイムリー。英語で書かれた子供向けの絵本は "get" "play" を始めとする「よく見る英単語だけで全てを表現する」から、単語の活用にも役立つんじゃないかな。 / “英語を真面目に勉強したい人の勉強法:ハムスター速報http://t.co/zczj0tXH  #

  • 14:16  オーム社さんからCoders at Work届いたーっ!読みたい本が多すぎる!  #

  • 15:04  しばらくこのフォントで生活してみよう / “プログラミング用フォント Ricty” http://t.co/25beIkbS  #

  • 15:48  んー、ごみ捨てに行きたいのに雨が振ってるー  #

  • 16:00  20年くらい前に初めて世に出たRubyって、世界から見たら圧縮アルゴリズムのlhaみたいな扱いだったのかも  #

  • 17:06  devise.ja.ymlの2.0版ってどっかに無いんすかね  #

  • 17:34  Rails3でもっだーんなフォームを作るプラグインを探してたけど、この際だからCoffeeScriptの練習に自分で作っちゃうか。車輪くらい再開発できないでどうする。  #

  • 18:06  不覚にもwwwwwww RT @PG_kura: (」・ω・)」インド人を!(/・ω・)/右へー!  #

  • 18:12  (」・ω・)」滅!(/・ω・)/出るからー!  #

  • 18:44  さてれっつがっこる  #

  • 18:45  トロ「あぁ、それは反語ですね?」 覚醒トロこえええwwwwwww  #

  • 23:44  なんか個人用古事記メモがいろんな人たちに興味を持たれている  #

  • 23:44  とりあえずiKnow!やって寝るか  #

2012年04月09日

ひとりごと on 2012-04-09

ついったからno title経由で自動投稿されてます。


  • 09:28  んー、パーティション全部ふっ飛ばしてインストールしようとしたけど、WindowsNICドライバを持ってこない……さすがにXPじゃ古すぎるな。  #

  • 09:32  いまUbuntu10.04LTSから書いてるけど、Windows7が届いたらこっちもまるごと消してパーティション構成を考え…いや、Ubuntu12.04が出てからかな。んー。  #

  • 09:41  今日は午後から予定が詰まってるなぁ、準備しないと  #

  • 10:04  さて支度するか  #

  • 20:57  ふぅ…  #

  • 22:10  熱中してると時間を忘れるから、Ubuntuに一日のスケジュール管理をしてもらおう  #

  • 22:12  Thunderbirdでもいいんだけど、慣れてるのでEvolution  #

  • 22:34  さて、古事記を読む  #

  • 22:49  「どうしてぼくがインチキだと思いますか。こんなにタノシミながら勉強しているのに。勉強がタノシミと一致するなんていうのは、ホンモノの証拠ではありませんか」  #

  • 23:23  いまさらだけど org-mode ちょうべんりじゃん  #