16

入力がどの自然言語に属しているかを特定する必要があります。目標は、混合入力でアラビア語英語の単語を区別することです。入力は Unicode であり、XML テキスト ノードから抽出されます。クラスに気づきましたCharacter.UnicodeBlock。それは私の問題に関連していますか?どうすれば動作させることができますか?

編集: このアプローチはアラビア語には役立ちましたが、 Unicode ブロックは文字だけでなく記号や印刷不可能な文字もカバーしてCharacter.UnicodeBlockいるため、英語 (または他のヨーロッパ言語) には適していないようです。そのため、代わりに正規表現を使用してオブジェクトのメソッドをBASIC_LATIN使用しています。私はそれで暮らすことができますが、おそらく誰かがより良い/より速い方法を提案することができます.matches()String"[A-Za-z]+"

4

5 に答える 5

19

はい、単純にCharacter.UnicodeBlock.of(char)を使用できます

于 2009-01-01T08:49:02.147 に答える
4

要件を満たしていれば[A-Za-z]+、より高速できれいなものを見つけることはできません。ただし、Latin1 ブロック内のすべての文字 (アクセント付き文字と合字を含む) に一致させたい場合は、次のように使用できます。

Pattern p = Pattern.compile("[\\pL&&\\p{L1}]+");

これは、すべての Unicode 文字のセットとすべての Latin1 文字のセットの共通部分です。

于 2009-01-04T11:31:37.410 に答える
2

おそらく、Unicode Script プロパティの方が便利です。Java では、 java.lang.Character.UnicodeScriptクラスを使用して検索できます。

Character.UnicodeScript script = Character.UnicodeScript.of(c);
于 2015-10-07T13:19:17.667 に答える
0

あなたはこれとは反対の問題を抱えていますが、皮肉なことに、彼にとってうまくいかないことはあなたにとってうまくいくはずです。reg-exp "\ w"を使用して、英語(ASCII互換の文字のみ)の単語を検索するだけです。

于 2009-01-03T13:08:46.747 に答える