6

たくさんのテキストを読んで分析するプログラムがあります。テキストはどの言語でもかまいませんが、日本語と中国語をテストして、別の方法で分析する必要があります。

Unicode番号で各文字をテストして、CJK文字の範囲内にあるかどうかを確認できることを読みました。これは役に立ちますが、可能であれば、異なる辞書に対してテキストを処理するためにそれらを分離したいと思います。キャラクターが日本語か中国語かをテストする方法はありますか?

4

6 に答える 6

6

Unicode 標準でユニハン コード ポイントが実装されているため、単一の文字をテストして、それが日本語か中国語かを確実に判断することはできません。基本的に、すべての漢字は潜在的な日本語の文字です。ただし、その逆は当てはまりません。また、テキストのブロックが 1 つの言語であるか他の言語であるかをテストするために使用できる規則がいくつかあります。

  1. 簡体字 - テストしている文字が中華人民共和国の場合、门などの簡体字は中国本土でのみ使用できます。
  2. かな - 文字があいうえおなどの多くの日本語のかな文字の 1 つである場合、作業しているテキスト ブロックは間違いなく日本語です。

問題は、共通する文字と単語の数が非常に多い場合に発生します。しかし、この問題を手っ取り早く解決する必要がある場合は、テキストのブロック全体で仮名をチェックします。テキストに仮名が含まれていれば、それが日本語であることがわかります。韓国語も区別する必要がある場合は、ハングルをテストします。また、中国語の種類を区別する必要がある場合は、単純化の種類をテストするのが最善の方法です。

于 2009-04-24T16:52:19.567 に答える
2

Unicodeの開発プロセスには、ハンユニフィケーションが含まれていました。これは、日本語の文字の多くが漢字から派生しているか、漢字と同じであるためです。韓国語も同様です。日本語で一般的に使用されている文字(カタカナとひらがな-Unicode標準v5.1.0の第12章を参照)は、テキストが中国語ではなく日本語であることを示していますが、決定的なものではなく統計的検定になると思います。

CJKV情報処理に関するO'Reillyの本をチェックしてください(CJKVは中国語、日本語、韓国語、ベトナム語の略です。CJKの前身がどこかに潜んでいます)。Unicode Explainedに関するO'Reillyの本もありますが、これはおそらくこの質問には当てはまらないかもしれません(日本語と中国語のテキストを識別する方法についての議論は思い出せません)。

于 2009-04-24T16:43:55.983 に答える
1

おそらく、それを確実に行うことはできません。日本語は中国語と同じ文字をたくさん使います。あなたができる最善のことは、テキストのブロックを見ることだと思います。日本語固有の文字が見られる場合は、ブロック全体が日本語であると見なすことができます。そうでない場合は、おそらく中国人です。

しかし、私は中国語を勉強しているだけなので、専門家ではありません。

于 2009-04-24T16:38:29.973 に答える
0

カタカナまたはひらがな範囲の文字のテストは、特に「通常の」ユーザー生成テキストを扱っている場合、テキストが日本語かどうかを判断するための非常に信頼できる手段です。法律文書やその他のより公式な文書を見ている場合、複雑な漢字がはるかに優勢であるため、少し難しいかもしれませんが、それでもかなり信頼できるはずです.

于 2009-05-04T10:14:56.333 に答える
0

日本語だけで(普通に)使われている、または中国語だけで使われている文字がたくさんあります。

日本と中国はどちらも多くの文字を単純化しましたが、多くの場合、その方法は異なっていました。日本語の心字体と簡体字を確認できます。前者よりも後者の方が多い。どちらでもない場合は、繁体字中国語を使用している可能性があります。

もちろん、Unicode テキストを扱っている場合は、時折珍しい文字や混合言語を見つけてヒューリスティックを失敗させる可能性があるため、文字の種類を数えて判断することをお勧めします。

ある言語で一般的であり、他の言語では一般的でない文字を見つける良い方法は、従来のエンコーディングを相互に比較することです。それぞれの Unicode へのマッピングは、インターネット上で簡単に見つけることができます。

コードポイントでバイナリ検索を行うコードを書いたことがありますが、JavaScript でも非常に高速でした。

于 2010-12-15T16:05:52.467 に答える
0

回避策は、Unicode に変換する前にエンコーディングをチェックすることです。

于 2009-09-01T02:44:12.463 に答える