有没有办法确定一个字符串是英语还是阿拉伯语?
问问题
22108 次
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-gram 的文本分类(该短语用 google),但这不是一种防故障技术,它可能需要一个不太短的字符串。
您可能还认为只有 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 回答