2
3

RMeCab トラブルシュート

Last updated at Posted at 2024-05-02

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のインストール先を変更できます。次の記事などを参考にしてください。

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での形態素解析はやめるか、gibasaRcppJaggerの利用を検討してください。

2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3