如何确定字符串是英语还是阿拉伯语?

有没有办法确定字符串是英语还是阿拉伯语?

这是我刚试过的一个简单的逻辑:

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表 )

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; } 

一个小的改动,涵盖所有阿拉伯字符和符号范围

 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; } 

您通常可以通过字符串本身中的代码点来判断。 阿拉伯语占用Unicode代码空间中的某些块 。

这是一个相当安全的赌注,如果这些块中存在相当大比例的角色(例如بلدي الحوامات مليء الثعابينة ),那就是阿拉伯语文本。

您可以使用基于N-gram的文本分类 (谷歌用于该短语),但它不是一种防故​​障技术,它可能需要一个不太短的字符串。

您可能还认为只有ASCII字母的字符串不是阿拉伯语。

尝试这个 :

 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; }