在字符串中测试日文/中文字符

时间:2009-04-24 16:34:25

标签: string unicode language-detection

我有一个程序可以读取一堆文本并对其进行分析。文本可能是任何语言,但我需要测试日语和中文,以不同的方式分析它们。

我已经读过,我可以测试它上面的每个字符的unicode编号,以确定它是否在CJK字符范围内。这很有帮助,但是如果可能的话,我想将它们分开来处理针对不同字典的文本。有没有办法测试角色是日语还是中文?

6 个答案:

答案 0 :(得分:6)

由于Unicode标准中实现unihan代码点的方式,您将无法测试单个字符以确定它是日语或中文。基本上,每个汉字都是潜在的日本人物。然而,反之则不然。此外,还有许多约定可用于测试文本的是否使用一种语言或另一种语言。

  1. 简化 - 如果您正在测试的角色是中国simplification,例如门,则只能在中国大陆地区使用。
  2. Kana - 如果角色是あいうえお等众多Japanese kana个字符中的一个,那么您正在使用的文本块肯定是日语。
  3. 问题出现在大量字符和单词的共同点上。但是,如果我需要一个快速而肮脏的解决方案来解决这个问题,我会检查我的整个文本块为假名 - 如果文本包含假名,那么我知道它是日语。如果你需要区分韩语,我会测试韩语。此外,如果您需要区分哪种类型的中文,那么测试简化类型将是最好的方法。

答案 1 :(得分:2)

开发Unicode的过程包括汉族统一。这是因为很多日文字符都来自或与中文字符相同;和韩国人一样。日语中常用的一些字符(片假名和平假名 - 参见Unicode标准v5.1.0的chapter 12)表明文本是日语而不是中文,但我相信这是一个统计测试,而不是明确的。

查看关于CJKV Information Processing的O'Reilly书籍(CJKV是中文,日文,韩文,越南文的缩写;我的CJK前身潜伏在某处)。关于Unicode Explained的O'Reilly书也可能有所帮助,但可能不是这个问题(我不记得有关如何识别日文和中文文本的讨论)。

答案 2 :(得分:1)

你可能无法可靠地做到这一点。日语使用与中文相同的字符。我认为你能做的最好的事情就是看一块文字。如果您看到任何唯一的日文字符,那么您可以假设整个块是日语。如果没有,那么它可能是中国人。

但是,我只是在学习中文,所以我不是专家。

答案 3 :(得分:0)

测试片假名或平假名范围中的字符应该是确定文本是否为日语的非常可靠的方法,特别是如果您正在处理“常规”用户生成的文本。如果您正在查看法律文件或其他更多的官方票价,可能会稍微困难一些,因为复杂的汉字会有更大的优势 - 但它应该仍然非常可靠。

答案 4 :(得分:0)

解决方法是在将编码转换为Unicode之前检查编码。

答案 5 :(得分:0)

有许多字符仅在日语中使用(通常)或仅用于中文。

日本和中国都简化了许多角色,但往往以不同的方式。您可以查看日语Shinjitai和简体中文字符。后者比后者多得多。如果没有,那么你可能有繁体中文。

当然,如果您正在处理Unicode文本,您可能会发现偶尔会出现罕见的字符或混合语言,这些字符可能会摒弃一种启发式方式,因此您最好计算字符类型以作出判断。

找出哪种字符在一种语言中而不是在另一种语言中是常​​见的一种好方法是将遗留编码相互比较。您可以在互联网上轻松找到每个映射到Unicode。

我曾经写过一些我用codepoint进行二进制搜索的代码,即使在JavaScript中它也非常快 - 我可能在旅途中丢失了它( - :