RMeCabを使ううえでのトラブルシュートです。
RMeCabをインストールできない
Linux/macOS
LinuxやmacOSでRMeCabをインストールするにはmecab-config
コマンドが必要です。
たとえばUbuntuでMeCabをaptでインストールした場合、apt install mecab
ではmecab-config
はインストールされていません。apt install libmecab-dev
でlibmecab-devをインストールしたか確認しましょう。
Windows
例年4月ごろのRのリリースがあったばかりのタイミングでは、RMeCabが公開されているリポジトリに最新のR向けのバイナリパッケージがまだアップロードされていない場合があります。Windowsでソースパッケージをビルドするには、Rtoolsが必要です。Rtoolsがインストールされているか確認しましょう。
管理者権限がないためMeCabをインストールできない
Linux
管理者権限のない環境にMeCabをインストールしたい場合、ソースからビルドする際に./configure --prefix=$HOME/usr/local
などとするとMeCabのインストール先を変更できます。次の記事などを参考にしてください。
- sudoが使えないマシンでmecabを使うまでの備忘録 #Python - Qiita
- Posit CloudにMeCab, RMeCab, gibasa, Sudachiをインストールする – 鶴見教育工学研究所
Windows
実は、RMeCabにはlibmecab.dllが同梱されているため、Windows環境にかぎり、辞書とmecabrc
ファイルがあれば、MeCabがインストールされていない環境でも動作させることができます。
ややトリッキーなやり方ですが、次のようにgibasaパッケージでMeCabの辞書をコンパイルしたうえでmecabrc
ファイルをホームディレクトリに配置するとRMeCabも正しく動くはずです。mecabrc
ファイルをホームディレクトリ以外の場所に書き出した場合、mecabrc
という引数に都度mecabrc
ファイルのパスを渡すと動かせると思います。
install.packages("gibasa")
install.packages("kelpbeds", repos = c("https://paithiov909.r-universe.dev", "https://cran.r-project.org"))
dic_dir <- fs::dir_create(file.path(Sys.getenv("HOME"), "ipadic-utf8"))
kelpbeds::prep_ipadic(dic_dir)
gibasa::build_sys_dic(
dic_dir = dic_dir,
out_dir = dic_dir,
encoding = "utf8"
)
readr::write_lines(
paste0("dicdir=", dic_dir),
file.path(Sys.getenv("HOME"), ".mecabrc")
)
解析に失敗する
macOS
macOSでarm64向けのRを利用している場合、MeCabもarm64向けのバイナリを用意する必要があります。筆者はmacOSを触ったことがないので未確認ですが、たとえばRosetta 2環境のHomebrewでMeCabがインストールされていると、RMeCabとMeCabのバイナリが正しくリンクされないことがあるようです。
どう対応すればいいのかよくわからない場合、すでにインストールされているMeCabはアンインストールしたうえで、RMeCabのインストールの仕方で案内されているやり方でMeCabを再度インストールすることをおすすめします。
Windows
RMeCabはmecabrc
という設定ファイルが参照できないと解析できません。MeCabがインストールされていることを確認しましょう。あるいは、「管理者権限がないためMeCabをインストールできない > Windows」で紹介したやり方で、その都度mecabrc
を指定することもできます。
また、x86向けのlibmecab.dllにパスが通ってしまっている環境では、そちらが参照されてしまってRMeCabでの解析に失敗することがあるようです。RMeCabを利用するうえでMeCabにパスを通す必要はないので、混乱を避けるためにも、WindowsでRMeCabを利用する際にはMeCabにはパスを通さないようにしたほうがよいでしょう。
その他のケース
普通に使っているとありえないケースですが、極端に長すぎる文字列を一度に解析させようとするとMeCab側で解析に失敗する可能性があります。テキストを文字列ベクトルとして渡す場合、ひとつひとつの文字列はほどほどの長さになるようにしておきましょう。
データフレームを渡したときの解析結果がおかしい
RMeCabはtibbleを正しく解析できません。docDF
でtibbleを解析したい場合、as.data.frame
を噛ませて普通のデータフレームに変換する必要があります。
v1.13でtibbleもそのまま解析できるようになったようです。
解析結果が文字化けする
辞書と解析するテキストのエンコーディングがあっていないと文字化けします。とくに事情がないかぎり、辞書はUTF-8でコンパイルしたものを利用しましょう。
readrなどを使ってテキストファイルを読み込んだ場合、もとのファイルのエンコーディングにかかわらず、テキストはすでにUTF-8に変換されています。読み込んだテキストに対してあらためて余計な変換をする必要はありません。ほかの何らかの方法で読み込んだUTF-8以外のテキストを解析したい場合にかぎり、iconv
などでUTF-8に変換してからRMeCabに渡すとうまくいくと思います。
docDFやRMeCabCでは返されない辞書の素性を使いたい
RMeCab::RMeCabText
という関数からすべての辞書の素性を利用できます。ただし、この関数はファイルを解析することしかできないため、Rに読み込んだテキストデータを解析させるには一度テキストファイルに書き出す必要があります。
どうしてもRMeCabを使いたいという事情がないかぎり、代わりにgibasaを使うことをおすすめします。
UniDicやほかの辞書を使いたい
mecabrc
ファイルのdicdir
を編集することで、システム辞書を指定することができます。
NEologd辞書を使いたい
NEologd辞書はすでにメンテナンスされていないため、特別な事情がないかぎり、利用はおすすめしません。IPA辞書ではうまく解析できないような比較的新しい語を含む文に対応する必要がある場合、UniDicやsuwadを使うことをおすすめします。
NEologd辞書を使うと解析に失敗する
NEologdに収録されている語彙はエントリそのものに半角スペースが含まれるものがあり、こうした語彙があるとWindows環境のRMeCabでは解析に失敗することがあります。NEologd以外の辞書を使うか、LinuxやmacOS環境でRMeCabを使いましょう。
ユーザー辞書が使えない
MeCabのユーザー辞書は、ユーザー辞書をコンパイルするときに使ったシステム辞書と必ずセットにして使います。たとえば、IPA辞書を使ってコンパイルしたユーザー辞書は、IPA辞書とセットにしてしか使うことができません。suwadについても同じ語彙のユーザー辞書を用意したいといった場合には、新たにCSVファイルをつくって、suwadを使ってユーザー辞書をコンパイルしなおす必要があります。
ユーザー辞書のコンパイルのやり方については、次のページを参照してください。
ユーザー辞書に登録した単語が解析結果に反映されない
システム辞書に登録されている語彙が組み合わされているような複合語については、解析させる文によっては、ユーザー辞書に登録した単語が解析結果に反映されない場合があります。そうした場合に意図したとおりの解析結果を得るためには、単語の生起コストを調整する必要があります。詳しくは、次のページの「生起コストを調整する」というセクションを読んでください。
解析にとても時間がかかる・もっと速く解析したい
RMeCabをparallelに実行してもおそらくそれほど速くなりません。
Rでの形態素解析はやめるか、gibasaかRcppJaggerの利用を検討してください。