[掲示板へもどる]
一括表示

  [No.2570] 他言語の文字を含むデータの共起ネットワーク 投稿者:Yoshinori Sugai  投稿日:2016/08/31(Wed) 23:52:32
他言語の文字を含むデータの共起ネットワーク (画像サイズ: 1522×821 177kB)

樋口先生

近畿大学の須賀井と申します.

もしかすると先生のサポート範囲から逸れるかもしれません.

No.2564の方と質問がかぶるかと思うのですが,
韓国語のデータ分析において,
以下のような語をノードとする共起ネットワーク図を作成する際,
添付の図のようなエラーが出て失敗します.
(khc*_temp0.rから引用.Windows8.1で,3.Alpha.08eを使用)

colnames(d) <- c("須達","世尊","耶輸","羅&#30586;羅","舍衛國","目連","護彌","舍利弗","須菩提")

実際には,韓国語のデータと言っても古語のデータで,
HanDicと同じような素性列で出力する辞書に差し替えています.
dicrcは先生のお作りになったものでやっています.
なお,同じデータを用いてMacで作業すると,問題がありません.
Windowsでも,現代語のデータ+HanDicでネットワーク図を書くことは問題ありません.

上記のようなUnicode漢字だけでなく,
「私用領域」に含まれる文字が元データ(あるいは解析結果)に出現する場合にも,
共起ネットワーク図の作成に失敗するようです.

先生が配布されているプログラムの使い方からだいぶ外れているかもしれませんが,
もし原因がお分かりになりましたら,ご教示いただければ幸いです.

何卒よろしくお願い申し上げます.


  [No.2571] Re: 他言語の文字を含むデータの共起ネットワーク 投稿者:HIGUCHI Koichi  投稿日:2016/09/02(Fri) 16:05:09

須賀井先生・皆さま

こんにちは、樋口です。書き込みありがとうございます。

ご研究を着々とお進めになっているご様子、眩しい思いがいたします。また、
その中でKH Coderをお試しいただき感謝申し上げます。

■原因

さて、エラーを拝見したところWindows版のRの制限に引っかかっているのかな
という印象です。Windows版のRは、「今処理しているのは日本語」「今処理し
ているのは韓国語」といった設定に色濃く影響を受けます。この設定をロケー
ルと呼びます。

ロケールとして指定できるのはWindowsのcode pageのみで、UTF-8は指定でき
ません。そしてcode pageを指定すると、そのcode pageに含まれない文字は扱
えなくなってしまいます。

例えば日本語版WindowsにインストールしたRは、デフォルトのロケールが日本
語(cp931)になっています。したがって、そのまま現代韓国語データを入力
すると「unexptecte INCOMPLETE_STRING」エラーになるはずです。ですから、
KH Coderを使って現代韓国語データで作成した共起ネットワークを、R形式
(*.r)で保存し、Rで実行してみると、このエラーになるでしょう。

> source("C:\\khcoder3\\net.r", encoding="UTF-8")
> # 「INCOMPLETE_STRING」エラー

しかしロケールを韓国語(cp949)に切り替えれば、ハングル文字を含むデー
タを扱えるようになります。

> Sys.setlocale("LC_ALL", "Korean") # ロケールを韓国語に切り替え
> source("C:\\khcoder3\\net.r", encoding="UTF-8")
> # 共起ネットワーク作成に成功するはずです

つまり、Windows版のRは、実のところUTF-8に対応しているとは言えないよう
に思います。UTF-8のデータ読み込み時に、現在のロケール(Windows code
page)に含まれない文字があると、エラーになってしまうのです。

Windows版のKH Coderは、韓国語データ分析時にはRのロケールを韓国語
(cp949)に設定しますので、cp949に含まれない文字があるとエラーになって
いるものと思います。今回の例では「&#30586;」
http://jigen.net/kanji/30586 がcp949に含まれていないのが原因のようです。


■解決策の模索

Mac版やLinux版のRにはこうした制限がないようでして、お書きいただいたよ
うにMacやLinuxではこのエラーは出ないはずです。


Windowsでは、Rのロケール設定を変えることで、もしかしたら対策可能かもし
れません。

というのは、韓国語の古語というのは、使われる文字はすべて漢字でしょうか?
使われている文字がすべて、現代中国語のコードページ(cp936)に含まれて
いるようでしたら、Rのロケールを中国語に設定すれば解決しそうに思います。

そこで、現在分析中の言語がなんであれ、Rのロケールを中国語に設定する
プラグインを作成してみました。
http://khcoder.info/psnl/tmp/force_chinese.zip

Zip内の「force_chinese.pm」を「plugin_jp」フォルダにコピーしてください。
そしてKH Coderを起動したら、メニューから「ツール」「プラグイン」「中国
語ロケールに設定」をクリックします。それから共起ネットワークを作成して
みていただくと、いかがでしょうか。


使われている文字がすべて、現代中国語のコードページ(cp936)に含まれて
いれば、おそらく共起ネットワークを作成できると思います。しかし、cp936
の範囲外の文字があるようだと、ちょっとWindowsではお手上げかもしれません。


p.s.
現在の3.Alpha.08eでは、上記プラグインをお使いいただかないと、前処理の
際に問題になる中国語文字は「?」に置換えられてしまうのではないかと思い
ます。前処理前に、上記プライグインで「中国語ロケールに設定」していただ
けば、中国語ロケール内の文字は「?」に変換されず、温存されるはずです。

なお、もし必要でしたら、cp936に含まれる文字のリストはこちらにございます。
ftp://ftp.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WindowsBestFit


  [No.2572] Re: 他言語の文字を含むデータの共起ネットワーク 投稿者:Yoshinori Sugai  投稿日:2016/09/03(Sat) 23:21:05

Re: 他言語の文字を含むデータの共起ネットワーク (画像サイズ: 582×612 53kB)

樋口先生

近畿大学の須賀井です.

お返事ありがとうございました.
お忙しい中,お手を煩わせてしまい,大変恐縮です.

原因について,ご教示ありがとうございました.
作成してくださったプラグインを使って,
中国語ロケールで該当するデータを処理してみたところ,
確かにネットワーク図を描画することができました.

ただ,韓国語の古語というのが,
漢字だけでなく,現代語には無いハングルが用いられており,
現状ではUnicodeの私用領域(Private Use Area)に割り当てられています.
その領域に文字が割り振られているフォントを使用しないと,
表示もできないという扱いです.

> つまり、Windows版のRは、実のところUTF-8に対応しているとは言えないよう
> に思います。UTF-8のデータ読み込み時に、現在のロケール(Windows code
> page)に含まれない文字があると、エラーになってしまうのです。

Rの問題ということは,KH Coderの側で対応するにもやはり限界がありそうですね….
Macの方で作業をするのが無難という感じでしょうか.
あるいはRの方の対応を待つしかなさそうですね.

ありがとうございました.
お時間取らせてしまい,大変申し訳ありませんでした.
取り急ぎ,お礼のみにて失礼致します.


  [No.2573] Re: 他言語の文字を含むデータの共起ネットワーク 投稿者:HIGUCHI Koichi  投稿日:2016/09/05(Mon) 03:37:21

須賀井先生・皆さま

こんにちは、樋口です。書き込みありがとうございます。

いえいえ、あまりお役に立てなくて申し訳ありません。何か役立つ回答ができ
るかどうかはさておき、掲示板へのご質問はいつでも大歓迎です。

そうなりますと、現代語にはないハングルが出てきた時点で、同じエラーにな
りそうですね。実のところ、KH Coderそのものにおいても、その文字はWindows
版では表示できないだろうと思います。Windows版のPerl/Tkの制限です。
https://twitter.com/khcoder/status/770496068094136320

RやPerl/Tkに手を加えるというのはあまり私にとって現実的でありませんので、
お書きいただいた通り、Macでお使いいただくのが無難かと思われます。

なお、すでにお気づきかもしれませんが、KH Coderの画面表示の言語はメニュ
ーから「プロジェクト」「設定」とたどっていただくと変更できます。共起
ネットワークなど、Rのプロットで使っているフォントを変更するには、
config/coder.iniを開き、font_plot_krという部分を変更していただく必要が
あります。coder.iniの編集は、KH Coderを終了してから行なって下さい。