gigi_QuestionsDesigner
@gigi_QuestionsDesigner (GiGi)

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

RのRMeCab、igraphの共起ネットワークで文字化け

解決したいこと

テキストマイニングで共起ネットワークを作成するために、Macで、RのRMeCabパッケージ、igraphパッケージを用いて、
NgramDF、graph.data.frame,plot関数を使ったのですが、文字化けしてしまいます。
par(family="HiraKakuProN-W3")@purple_jpさんの.Rprofileを試しても解決しませんでした。

発生している問題・エラー

image.png

該当するソースコード

library(RMeCab) #インストール済み
library(igraph) #インストール済み
NgramDF.result <- NgramDF(file.choose(), type=1, N=2, pos ="名詞")
g <- graph.data.frame(NgramDF.result.2, directed = FALSE)
plot(g, vertex.label = V(g)$name, vertex.color="grey", family="HiraKakuProN-W3")

自分で試したこと

1)パッケージのアンインストールと再インストール
2)par(family="HiraKakuProN-W3")
3)@purple_jpさんの記事の.Rprofile
4)共起頻度のハードルを高めて、ノード数を減らす

関連情報

> version
               _                           
platform       x86_64-apple-darwin17.0     
arch           x86_64                      
os             darwin17.0                  
system         x86_64, darwin17.0          
status                                     
major          4                           
minor          0.3                         
year           2020                        
month          10                          
day            10                          
svn rev        79318                       
language       R                           
version.string R version 4.0.3 (2020-10-10)
nickname       Bunny-Wunnies Freak Out     

ご助言お願いいたします!

0

3Answer

調べてみたところ以下のような記事がありました。
アールメカブ:Rの文字化け
ここに書かれている通り、Sys.setlocale(“LC_ALL”, ‘Japanese_Japan.932’)を使うとうまくいくかもと思います。ただ作業環境のロケールを変更してしまうので、他のところに問題が出る可能性もあります。

もしかしたら、読み込んでいるファイルの方のエンコードをSys.getlocale()で確認したロケールと合わせると解決するかもしれません。

文字コード関連はあまり詳しくないのであっているかわかりませんが、ご参考に慣れば幸いです。

1Like

Comments

  1. @ocean_f さん、ありがとうございます!
    記事まで調べていただき恐縮です!

    おっしゃる通り、作業環境のロケールを変更は、何か他に問題が起きた時に私の今のスキルで対処しきる自信がなかったので、Sys.getlocale()のみ試させていただきました。
    一度やってみて残念ながら解決しませんでしたが、もう少しこの切り口で試行錯誤してみます!
    ありがとうございました!

#1. 全般的なお話
ご存じかもしれませんが、RでNLPを行う場合、①*.txt等の元文書、②形態素解析器・辞書、③Rの3つの文字コードの相性が鍵になります。基本的に各々は統一されていることが望ましく、どこかの文字コードが異なっている場合、文字化け等が発生する可能性が高まります。こうした文字コードの相性はOSの影響も受けますので、私はWindowsですから限定的なアドバイスしか出来ませんが、ご参考になれば幸いです。

2. トラブルシューティング

2.0. 確認

まず、そもそもR側できちんと元データを読み込めたり加工できているかを確認してみてください。とくに、データに日本語が含まれている場合、日本語が文字化けしているか否か確認してみてください。

# 全体的にデータに問題がないか俯瞰するために、head()は一応避けることを推奨します。
> NgramDF.result
> g
RMeCabC("すもももももももものうち")
> RMeCabC("すもももももももものうち")
[[1]]
    名詞 
"すもも" 

[[2]]
助詞 
"も" 

あくまで可能性の話ですが、大体はこんな感じだと思います。

①OK ①NG
②OK フォントの設定等、R内部の問題に起因している可能性が高いと思われます。 元データの文字コードが原因の可能性が高いと思われます。
②NG 何かしら文字コードの問題があると思います。(このパターンはあまり想定されないと思われます) 形態素器自体を含め、全体的に文字コードの相性が悪い可能性があります。

2.1. 元文書の文字コードについて

基本的には、OSやRの文字コードはどうしようもないので、基本的には元文書や形態素解析器を適切に選択・加工することで対処できると考えられます。OSXであれば、内部的にはUnicodeで書かれているはずなので、基本的にこれらをUnicodeに統一すると考えられる要因を一つは潰せるはずです。

一番手っ取り早いのは、元文書の文字コードを変換することです。そこでお好きなツール(私はNotepad++を使用しています)で文字コードを手あたり次第に変換して試行錯誤してみてください。大抵はSHITF-JIS (ANSI), UTF-8, UTF-8 BOMBあたりで落ち着きます。

2.2. RStudio側の設定について

直接関与するかは不明ですが、Tool > Global Options > Code > Saving でテキストのエンコーディングを選択できますので、一応確認してみてください。恐らくデフォルトでなっていると思いますが、UTF-8にしておけば多分問題ありません。

2.3. フォントについて

あまり可能性は高いとは思いませんが、フォント自体を変更して解決する場合もあります。
質問者様が普段よく使う日本語フォントのファミリーを数種類取替ながら試してみてください。
須通り_統計_Rにおける作図時のフォント設定を極める

2.4. 形態素分析器・辞書自体の見直し

こちらの記事が参考になると思います。テキストデータ等を見直してダメなようでしたらご一考ください。
Mecabインストールで文字化けた場合の対処法 - Qiita

3. 追記

(続き)のコメント含め、私のほうでも適当なデータを用意して検証してみました。
私の場合、RStudio上のplotやPNG出力であれば上手く行きましたが、SVGで出力しようとすると確かに同様の現象が発生しました。
一方で、それとは別に、普通の回帰分析の結果等を日本語を交えて画像保存する分には何ら問題なかったので、恐らくですが{igraph}というパッケージ固有の問題であると考えました。

そこで{igraph}に当たりを付け、公式のヘルプを含め色々調べてみましたが、{igraph}のフォントはplot(..., font = "")で制御できるということばかり書いてあったので若干諦めかけていましたが、こちらのサイトの「5.1 プロットに関するパラメータ」にて、vertex.label.familyという引数の存在があることが判明したので、試しに引数を設定してみたところ、上記問題は解決しました。

ということで長々と書きましたが、結論だけサラッと書いてしまえば、以下の通り書き換えてみてください。

plot(g,
     vertex.label = V(g)$name,
     vertex.color="grey", 
     vertex.label.family="HiraKakuProN-W3")

これは推測ですが、恐らくパッケージ側でvertex.label.familyに規定値としてSerif等が設定されています。このような個別の設定は全体的なフォント指定であるfont引数に優先して適用されるため、いくらfamily="HiraKakuProN-W3"と設定してもパッケージ側の規定値に上書きされてしまうことが原因だったと考えられます。従って、一般論としては既にお試しになられたpar(family="HiraKakuProN-W3")等の方法が適切な解決法であるところ、今回は偶々特殊なケースだったということだと思います。

1Like

Comments

  1. @zakkiiii さん!返信が遅くなり申し訳ございません!
    とてもとても丁寧かつ体系的にわかりやすくアドバイスいただきありがとうございます!
    お恥ずかしながら、私は把握してなかったこともあり、勉強になりました!

    ひとつずつ試していきたいと思います!
  2. コメントを受けまして私のほうでも色々試してみたところ、解決法を何とか見つけられました。追記として書いておきましたので、もし宜しければお試しください。
  3. @zakkiiii さん!

    お忙しい中、早速の追加アドバイスありがとうございます!!
    おかげさまで解決しました!!
    文字化けせずに表示されたのを見て、本当に嬉しかったです。。。
    ありがとうございます!!

    vertex.label.family="HiraKakuProN-W3"
    で、1発でした!
    本当に助かりました、ありがとうございます!

(続き)
@zakkiiii さん!アドバイス試してみましたが、
・確認したところ、①も②もコンソール上では文字化けはみられなかったので「フォントの設定等、R内部の問題に起因している可能性が高いと思われます。」になるのかなと思います。
・R studioのtoolsからUTF-8にするなどしましたが解決しません。。
・guess_encoding(tmp)で確認しましたが、下記のようになります(判断も対処もわかりませんが)

解決は難しいということなのでしょうか。。。

# A tibble: 4 x 2
  encoding  confidence
  <chr>          <dbl>
1 UTF-8           1   
2 Shift_JIS       0.51
3 Big5            0.41
4 GB18030         0.26
0Like

Your answer might help someone💌