射撃の的になりつつ前進

品質保証やソフトウェアについてのちょっとしたメモです

Tokyo.R女子部#2行ってきました

業務の関係でRを使うことになり、前日にTokyo.R女子部#2の開催を知り、突撃で行ってきました。

軽く全員自己紹介をした後、一時間ずつ実践を重視した講義がありました。

irisデータを使ったRの基礎

@fukamon_xxx さん

Rにはインストールした時点でいくつかデータが付属されているので、irisデータというアヤメの花びらの長さ・幅等のデータセットを使ってプロットの機能をさくっと練習しました。私はRを使うのが大学の講義以来だったため、思い出しながらの作業となりました。

Rでテキストマイニング超入門

@nanaya_sac さん

MeCab、RMeCabを使ってNHKの今日の料理のスクリプトを形態素解析するというお話でした。この資料の最後にもありますが、MeCabの辞書生成には罠があり、そもそも辞書生成をできなかったので色々調べてみました。

MeCabで辞書生成ができないのは何故か

資料には

ふっくら,-1,-1,1000,オノマトペ,*,*,*,*,ふっくら,フックラ,フックラ

という一行をcsvで保存する、となっていますが、このままファイルを作成し辞書生成しようとすると、

context_id.cpp(96) [it != left_.end()] cannot find LEFT-ID

というエラーが出ます。

ふっくら,*,*,1000,オノマトペ,*,*,*,*,*,ふっくら,フックラ,フックラ

とするべきだ、という結論に至りました。 公式ドキュメントには、左文脈ID(二項目目)、右文脈ID(三項目目)は

空にしておくと mecab-dict-index が自動的に ID を付与します

と記載されているのですが、少なくともMeCabバージョン0.996では以下のように空にしても辞書生成はできませんでした。

ふっくら,,,1000,オノマトペ,*,*,*,*,*,ふっくら,フックラ,フックラ

csvをパースする際のコードが原因か、パースした文字列をintに変換するときに問題が起こっているのかなあと思っています。真面目にコードを読めばはっきり原因がわかるかもしれませんが、そもそもこれが仕様なのかどうなのかもよくわからないので(空にして、という言葉が本当に空のことを指しているのかがわかりません)もう放置することにしました。

そして左右文脈IDには文字列を格納することも出来るのですが、型変換でintに変換しているためにできるだけなので普通に数字を入れるか「*」を指定してやればよいと思います。

この記事には0を指定すればmecab-dict-index が自動的にIDを付与する、と書いてあったり、昔のテキストには-1を指定すれば自動的にIDが付与されると書いてあったりしますが、-1は上記と同様のエラーが出ますし、0を指定して本当にIDが自動的に付与されているかどうかまで調べていないのでわかりません。ということで私は今のところ「*」を推しておきます(「*」もどういう扱いになってるか分からないので安心して使うには調べる必要がありますが、面倒なのでやりません)。

ということで、色々罠にハマってしまいましたが、勉強になりました。 Tokyo.R女子部はこれからも隔月で開催されるようなので、また参加したいと思います。