はじめに
Windowsを使い、RMeCabでテキスト解析を行う際に前処理はエディタで行っていたけれど、どうせならR上で前処理をということで、stringrで前処理をやってみたけれどうまくいかない。
よく見ると文字化けしているようでした。
環境
Windows10 64bit 言語:日本語
R 3.6.1 64bit
RStudio 1.2.1335
MeCab 0.996-32bit
RMeCab 1.04
状況確認
文字列置換し、RMeCabで形態素解析
stringrのstr_replace_all関数で
「今日は焼肉食べに行こう。」の「焼肉」を「寿司」に置換し後
RMeCabCで形態素解析してみます。
コードは以下の通りです
> library(dplyr)
> library(stringr)
> library(RMeCab)
>
> text<-"今晩は焼肉食べに行こう。"
> text1<-text %>% str_replace_all("焼肉","寿司")
> RMeCabC(text1) %>% unlist
名詞 名詞 名詞 名詞 名詞 名詞 名詞 名詞
"莉" "頑勦" "縺" "ッ" "蟇" "ソ" "蜿" "ク"
名詞 名詞 名詞 名詞 名詞 名詞 名詞 名詞
"鬟溘" "∋" "縺" "ォ" "陦" "後" "%" "縺"
記号
"<86>縲<82>"
文字化けしているようです。
念のため形態素解析をかけてないtext1を表示。
> text1
[1] "今晩は寿司食べに行こう。"
こちらは大丈夫。
str_replace_allで置換する前のtextを形態素解析すると、
> RMeCabC(text) %>% unlist
名詞 助詞 名詞 動詞 助詞 動詞 助動詞 記号
"今晩" "は" "焼肉" "食べ" "に" "行こ" "う" "。"
text,textのエンコードをEncoding関数で調べてみましょう。
> Encoding(text1)
[1] "UTF-8"
> Encoding(text)
[1] "unknown"
なんと変換後のtext1はUTF-8となるではないですか。
解決方法
理由が分かったところで、落ち着いてiconv関数でUTF-8からWindow標準のCP932に変換し、
RMeCabCで形態素解析したところうまくいきました。
> text2<-text1 %>% iconv(from="UTF-8",to="CP932")
> Encoding(text2)
[1] "unknown"
> RMeCabC(text2) %>% unlist
名詞 助詞 名詞 動詞 助詞 動詞 助動詞 記号
"今晩" "は" "寿司" "食べ" "に" "行こ" "う" "。"
>
docDFでも同じ方法で文字化け問題を解決できました。
iconv関数はベクトルも引数にとれるので、データフレームの1列を取り出しベクトルを引数にとって
処理可能です。Rのありがたき仕様。