LDAvisの文字化けの原因
LDAvisは以下の5つのファイルを作成する。
- index.html
- lda.css
- d3.v3.js
- ldavis.js
- lda.json
この中で、lda.jsonにLDAモデルから作成されたデータが入っている。
LDAvisパッケージの関数createJSONのvocabに日本語を設定すると文字化けが起きて画面に何も表示されない。原因は文字コード体系にある。
json <- createJSON( phi = posterior(model)$terms theta = posterior(model)$topics vocab = colnames(posterior(model)$terms) doc.length = rowSums(as.matrix(dpc_dtm)) term.frequency = colSums(as.matrix(dpc_dtm)) mds.method = svd_tsne )
リスト1.createJSON
LDAvisはcharset="utf-8"でindex.htmlを作成する。したがってlda.jsonもutf-8で作成されなければならない。しかし、Windows版のR Studioの内部コード (option()$encoding) はShift_JIS (CP932)なので、lda.json中の日本語部分はShift_JISで書き出され、index.htmlとの間に齟齬が生じて動かなくなるようだ。
対策
調べた限り、LDAvisにはエンコードを指定するオプションはないようなので、Windowsの内部コードを一時的にUTF-8に変更して処理を行い、終わったら元に戻す(参考サイト)。tmp.enc <- options()$encoding options(encoding = "UTF-8") dpc_df <- read.table("input.csv", header=T, sep=",", fileEncoding = "CP932") ・・・LDAvisのメイン処理・・・ options(encoding = tmp.enc)
リスト2.LDAvisの処理
R Studioの内部エンコードはoptions()$encodingに格納されているので一時的にこの値をテンポラリ変数tmp.encに退避したのちにoptions(encoding = "UTF-8")でUTF-8を設定する。
読み込むCSVファイルがShift-JISで作成されている場合はread.tableにオプションfileEncoding = "CP932"を付けて読み込む。ファイルのエンコードが"UTF-8"であればこれは不要である。
その後、LDAvisのメイン処理を行って、処理が終わったら退避していた元のエンコードに戻す。
0 件のコメント:
コメントを投稿