Java 从UTF8获取语言

Java 从UTF8获取语言,java,utf-8,Java,Utf 8,我有几个utf8字符串,需要根据使用的字符找出语言。区分德语、荷兰语和英语等使用拉丁字母的语言并不重要。出现的语言为阿拉伯语、朝鲜语、汉语、日语,即具有明确字符集的语言。在大多数情况下,字符串本身就是名称,可以假设第一个字符就足以识别。理论上,您可以在java中使用德语和汉语的字符串(unicode 16) 您可能可以维护一个频繁出现的汉字列表,如果它们存在,则假设其中文等一种方法是,对于每种语言,保留一个有序对(c,f)列表,其中c是该语言中唯一的字符,f是该字符在该语言的合理语料库中出现的频

我有几个utf8字符串,需要根据使用的字符找出语言。区分德语、荷兰语和英语等使用拉丁字母的语言并不重要。出现的语言为阿拉伯语、朝鲜语、汉语、日语,即具有明确字符集的语言。在大多数情况下,字符串本身就是名称,可以假设第一个字符就足以识别。

理论上,您可以在java中使用德语和汉语的字符串(unicode 16)


您可能可以维护一个频繁出现的汉字列表,如果它们存在,则假设其中文等一种方法是,对于每种语言,保留一个有序对(c,f)列表,其中c是该语言中唯一的字符,f是该字符在该语言的合理语料库中出现的频率。(将这些列表称为“字符直方图”。)

然后,对于每个文档,计算文档中的字符直方图,并将其与所有已知语言进行比较。选择最接近的匹配项

更好的方法是比较单词直方图


一个实用的方法是。。。我不知道。

最简单的方法是使用icu4j库和方法

它根据每个字符检测脚本。对于标点和间距,它返回
UScript.COMMON
。对于拉丁语,它返回
UScript.Latin
。对于中文和日文汉字,它返回
UScript.HAN
。对于日语假名,它返回
UScript.KATAKANA
UScript.HIRAGANA
(因此一个
HAN
不能证明文本是中文而不是日语)

建议您迭代字符串的代码点,但在大多数情况下,迭代
char
s就足够了

这里还有一些理论:


下面是为所有字符定义脚本的表格:

您所说的“UTF-8字符串”是什么意思?在Java中,字符串总是表示为UTF-16代码单元的序列。@JonSkeet,噢,Ick!这是真的吗?我本以为现在他们已经将字符串重新定义为Unicode代码点序列。我想他们必须与16位字符数据类型的原始定义保持向后兼容性。@jameslarge:有一些方法可以检索代码点或使用代码点索引,但大多数API都是UTF-16代码单元:(