LDAvisの日本語文字化け

LDAvisの文字化けの原因


LDAvisは以下の5つのファイルを作成する。

  1. index.html
  2. lda.css
  3. d3.v3.js
  4. ldavis.js
  5. 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 件のコメント:

コメントを投稿

ChatGPT は、米国の医師免許試験に太刀打ちできるか?

A Gilson et al.: How Does ChatGPT Perform on the United States Medical Licensing Examination? The Implications of Large Language Models for ...