我有几个utf8字符串,需要根据使用的字符找出语言。使用德语,荷兰语和英语等拉丁字母来区分语言并不重要。出现的语言是阿拉伯语,韩语,中文,日语,即具有明确字符集的语言。在大多数情况下,字符串本身就是名称,可以假设第一个字符足以识别。
答案 0 :(得分:1)
最简单的方法是使用icu4j库和方法UScript.getScript(int)
它检测每个字符的脚本。对于标点符号和间距,它返回UScript.COMMON
。对于拉丁语,它返回UScript.LATIN
。对于中文和日文汉字,它返回UScript.HAN
。对于日语假名,它会返回UScript.KATAKANA
或UScript.HIRAGANA
(因此一个HAN
不会证明文字是中文而不是日文。)
建议您迭代字符串的代码点,但在大多数情况下,迭代char
就足够了。
这里还有一些理论:https://en.wikipedia.org/wiki/Script_%28Unicode%29
这里的表格包含为所有角色定义的脚本:http://www.unicode.org/Public/UNIDATA/Scripts.txt
答案 1 :(得分:0)
理论上,你可以在java中使用德语和中文的字符串(unicode 16)
你可以维护一份经常出现的中文字符列表,如果它们存在,则假设它的中文字符等
答案 2 :(得分:0)
对于每种语言,一种方法是保留有序对(c,f)的列表,其中c是来自语言的唯一字符,f是某个合理语料库中该字符的出现频率从那种语言。 (称这些列表为“字符直方图”。)
然后,对于每个文档,从文档中计算字符直方图,并将其与所有已知语言进行比较。选择最接近的匹配。
更好的方法是比较 word 直方图。
实用方式将是......我不知道。