4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Rで、文字列が中国語か日本語か、雑に判定する

4
Last updated at Posted at 2022-09-21

やりたいこと

漢字だけの文字列があった場合、それが日本語か中国語か、判定したい。
例えば、

  1. 東京都千代田区富士見町(ただの住所)
  2. 在東京都千代田區富士見町見面吧(中国語で、富士見町で会いましょう)

について、1は日本語に、2は中国語と判定したい。

しかしRやPythonの各種の自動判定のパッケージでも、
「漢字のみテキスト」については日本語と中国語に分けるのは難しいらしく、
しばしば1も中国語に判定されていまう。

例えばRで代表的な言語判定パッケージのfrancでも、下記の結果となる。(cmnは中国語。whitelistにjpnと入れても駄目)
image.png

困った。

雑な解決策

こちらの方のアイデアを拝借した。
https://qiita.com/ry_2718/items/47c21792d7bbd3fe33b9

中国語である = 簡体字や繁体字、つまり日本語には存在しない漢字が使われている
として、文字列を日本語文字コードに変換したときに、文字が無くなる=中国語である
とするものである。

これをRで書くと、以下の通り。(utf-8でコーティングしている前提)

iconv("東京都千代田区富士見町",from = "utf-8",to = "cp932")
iconv("在東京都千代田區富士見町見面吧",from = "utf-8",to = "cp932")

実行結果。
image.png
「東京都千代田区富士見町」は簡体字や繁体字を含まないので、そのまま変換される。
つまり日本語である可能性が残る。
一方で「在東京都千代田區富士見町見面吧」は「吧」が日本語には存在しない文字なので、NAとなる。
つまり確実に中国語である。

まとめ

上記の手法を使えば、francなどの言語判定パッケージで「中国語」と判定されたテキストについて、
・確実に中国語である文字列
・実は日本語かもしれない文字列
に分けることができる。
後者については、簡体字や繁体字を含まない中国語の文字列も存在するため、日本語であるとも言い切れないが、
実は日本語なのに、文章を誤って中国語と断定してしまうことは避けられる。

「中国語の文字列だけを除外して、日本語の文字列は極力残したい」といったような場合には
有効な手法と考えられる。

注意

対象とする文字列に、簡体字・繁体字以外にもiconvにかけるとNAになる文字、たとえばutr-8にしか存在しない絵文字などが入っていると
誤作動してしまうので、別途処理が必要。

おわり

おわりです。お疲れさまでした。

4
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?