RMeCabのdocDFコマンドで文書-単語行列を作成する際にNEologd辞書を使う方法


はじめに

RMeCabのdocDFコマンドで形態素解析する場合NEologd辞書を使用して文書-単語行列を作成する場合エラーが出ます。
これはdocDFコマンドでは内部の処理で単語区切りにスペースを用いている様で、
一方でNEologd辞書では原型語に"AIR Do"の様にスペースを持った語が登録されているためにエラーとなるようです。
http://rmecab.jp/new/forums/topic/neologd%E8%BE%9E%E6%9B%B8%E7%AD%89%E3%81%AE%E3%82%B9%E3%83%9A%E3%83%BC%E3%82%B9%E3%82%92%E5%90%AB%E3%82%80%E5%8D%98%E8%AA%9E%E3%81%AE%E6%89%B1%E3%81%84%E3%81%AB%E3%81%A4%E3%81%8D%E3%81%BE%E3%81%97/

このため、原型語を使わないオプションGenkei=1をつけてdocDFで文書-単語行列を作る際はエラーが出ません。
ただこれだと形態素数が増え行列が大きくなるのと、活用によって形態素が分かれてしまうので疎な行列になってしまいます。

解決方法

コンパイル前のNEologd辞書の原型語の列のスペースを"_"に変換してからコンパイルする。
ただ、NEologd辞書はUTF-8の500MB程のcsvファイルなのでこれを編集する必要があります。

手順

1.NEologd辞書のseedのcsvファイルを開く

2019/02/17現在 原型語にスペースが含まれているのはecab-user-dict-seedファイルのみです。
mecab-user-dict-seed.(NEologd辞書の日付).csvをUTF-8の大容量ファイルを編集できるアプリケーションで開く。
自分はEmEditorを用いました。
https://jp.emeditor.com/

2.原型語の列(11列)目の全角スペースを"_"に変える。

3.ファイルを保存

4.後は通常の手順と同じくコンパイルして.dicファイルを作成する。

コンパイル以降は以下の記載を参照ください。
https://qiita.com/zincjp/items/c61c441426b9482b5a48

課題

ただ、この方式を用いると複数語からなる原型語の間には_が入ってしまいます。

ベルトコンベア  名詞,固有名詞,一般,*,*,*,conveyor_belt,ベルトコンベア,ベルトコンベア

なんとかプログラムでそれもRで出来ないか考えましたが、
!|||!( ♉ฺ ω ♉ฺ ;)!|||!
↑こんなのがうまくread.csvで読めずに諦めました。