6

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

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

4

6 回答 6

6

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

  1. 简化 - 如果您正在测试的字符是中国简化,例如门,则仅在大陆中文中可用。
  2. 假名 - 如果字符是许多日文假名字符之一,例如あいうえお,那么您正在使用的文本块肯定是日文。

问题在于共同的字符和单词的绝对数量。但是,如果我需要一个快速而肮脏的解决方案来解决这个问题,我会检查我的整个文本块是否有假名 - 如果文本包含假名,那么我知道它是日语。如果您还需要区分韩语,我会测试韩文。另外,如果您需要区分什么类型的中文,测试简化类型将是最好的方法。

于 2009-04-24T16:52:19.567 回答
2

统一码的发展过程包括汉统一。这是因为很多日文字符是从汉字衍生出来的,或者和汉字相同的。韩语也一样。日语中常用的一些字符(片假名和平假名 - 参见Unicode 标准 v5.1.0 的第 12 章)表明文本是日语而不是中文,但我相信这将是一个统计测试而不是确定性。

查看 O'Reilly 关于CJKV 信息处理的书(CJKV 是中文、日文、韩文、越南文的缩写;我有 CJK 的前身潜伏在某处)。还有 O'Reilly 关于Unicode Explained的书,它可能会有所帮助,尽管可能不适用于这个问题(我不记得讨论过如何识别日文和中文文本)。

于 2009-04-24T16:43:55.983 回答
1

你可能无法可靠地做到这一点。日语使用了很多与中文相同的字符。我认为你能做的最好的就是看一段文字。如果您看到任何独特的日文字符,那么您可以假设整个块都是日文。如果不是,那可能是中文。

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

于 2009-04-24T16:38:29.973 回答
0

测试片假名或平假名范围内的字符应该是确定文本是否为日语的一种非常可靠的方法,尤其是在您处理“常规”用户生成的文本时。如果您正在查看法律文件或其他更官方的票价,则可能会稍微困难一些,因为复杂的汉字将占主导地位 - 但它仍然应该非常可靠。

于 2009-05-04T10:14:56.333 回答
0

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

于 2009-09-01T02:44:12.463 回答
0

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

日本和中国都简化了许多字符,但通常采用不同的方式。您可以检查日文 Shinjitai 和简体中文字符。后者比前者多得多。如果两者都没有,那么您可能有繁体中文。

当然,如果您正在处理 Unicode 文本,您可能会发现偶尔出现的稀有字符或混合语言,这可能会引发启发式算法,因此您最好通过计算字符类型来做出判断。

找出哪些字符在一种语言中常见而在其他语言中不常见的一个好方法是将旧编码相互比较。您可以在 Internet 上轻松找到每个到 Unicode 的映射。

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

于 2010-12-15T16:05:52.467 回答