31

文字列が英語かアラビア語かを判断する方法はありますか?

4

8 に答える 8

50

これが私が試したばかりの単純なロジックです:

  public static boolean isProbablyArabic(String s) {
    for (int i = 0; i < s.length();) {
        int c = s.codePointAt(i);
        if (c >= 0x0600 && c <= 0x06E0)
            return true;
        i += Character.charCount(c);            
    }
    return false;
  }

アラビア語のUnicodeコードポイントがテキストに見つかった場合にのみ、テキストをアラビア語として宣言します。このロジックを拡張して、ニーズにより適したものにすることができます。

範囲0600〜06E0は、アラビア文字および記号のコードポイント範囲です(Unicodeテーブルを参照) 。

于 2013-02-27T08:50:33.193 に答える
11

Java自体はUnicodeによるさまざまな言語チェックをサポートしており、アラビア語もサポートされています。同じことを行うためのはるかに簡単で最小の方法は、UnicodeBlockによるものです

public static boolean textContainsArabic(String text) {
    for (char charac : text.toCharArray()) {
        if (Character.UnicodeBlock.of(charac) == Character.UnicodeBlock.ARABIC) {
            return true;
        }
    }
    return false;
}
于 2016-10-03T09:55:59.380 に答える
7

すべてのアラビア文字と記号の範囲をカバーするためのマイナーな変更

private boolean isArabic(String text){
        String textWithoutSpace = text.trim().replaceAll(" ",""); //to ignore whitepace
        for (int i = 0; i < textWithoutSpace.length();) {
            int c = textWithoutSpace.codePointAt(i);
          //range of arabic chars/symbols is from 0x0600 to 0x06ff
            //the arabic letter 'لا' is special case having the range from 0xFE70 to 0xFEFF
            if (c >= 0x0600 && c <=0x06FF || (c >= 0xFE70 && c<=0xFEFF)) 
                i += Character.charCount(c);   
            else                
                return false;

        } 
        return true;
      }
于 2015-03-04T12:51:08.947 に答える
3

通常、文字列自体のコードポイントでわかります。アラビア語は、Unicodeコードスペースの特定のブロックを占めています。

これらのブロック(などبلدي الحوامات مليء الثعابينة)にかなりの割合の文字が存在する場合、それはアラビア語のテキストであるというのはかなり安全な賭けです。

于 2013-02-27T08:30:48.557 に答える
1

この答えはやや正しいです。しかし、ペルシア語と英語の文字を組み合わせると、 TRUE!が返されますが、これは正しくありません。ここでは、同じメソッドを変更して、うまく機能するようにしました

 public static boolean isProbablyArabic(String s) {
    for (int i = 0; i < s.length();) {
        int c = s.codePointAt(i);
        if (!(c >= 0x0600 && c <= 0x06E0))
            return false;
        i += Character.charCount(c);
    }
    return true;
}
于 2020-03-09T20:07:39.150 に答える
0

Nグラムベースのテキスト分類(そのフレーズのグーグル)を使用することもできますが、これは失敗を防ぐ手法ではなく、短すぎない文字列が必要になる場合があります。

また、ASCII文字のみの文字列はアラビア語ではないと判断する場合もあります。

于 2013-02-27T08:30:31.893 に答える
0

英語の文字は、次の4つのUnicodeブロックに含まれる傾向があります。

  • BASIC_LATIN
  • LATIN_1_SUPPLEMENT
  • LATIN_EXTENDED_A
  • GENERAL_PUNCTUATION

    public static boolean isEnglish(String text) {
    
     boolean onlyEnglish = false;
    
     for (char character : text.toCharArray()) {
    
        if (Character.UnicodeBlock.of(character) == Character.UnicodeBlock.BASIC_LATIN
                || Character.UnicodeBlock.of(character) == Character.UnicodeBlock.LATIN_1_SUPPLEMENT
                || Character.UnicodeBlock.of(character) == Character.UnicodeBlock.LATIN_EXTENDED_A
                || Character.UnicodeBlock.of(character) == Character.UnicodeBlock.GENERAL_PUNCTUATION) {
    
            onlyEnglish = true;
        } else {
    
            onlyEnglish = false;
        }
     }
    
      return onlyEnglish;
    }
    
于 2018-12-05T18:32:23.910 に答える
-1

これを試して :

internal static bool ContainsArabicLetters(string text)

{

foreach (char character in text.ToCharArray())
{
    if (character >= 0x600 && character <= 0x6ff)
        return true;
    if (character >= 0x750 && character <= 0x77f)
        return true;
    if (character >= 0xfb50 && character <= 0xfc3f)
        return true;
    if (character >= 0xfe70 && character <= 0xfefc)
        return true;
}
return false;
}
于 2014-09-24T12:33:07.347 に答える