【问题标题】:How do I identify multiple language from a simple text file?如何从一个简单的文本文件中识别多种语言?
【发布时间】:2015-03-18 20:11:45
【问题描述】:

目前,出于我的研究目的,我正在开发一种音译软件,用于将 Cp1252 编码方案中的文本转换为其适当的 unicode 基本多语言平面值。文本混合了两种语言(曼尼普里语和英语)并使用不同的字体。

虽然文本中的两种语言在视觉上看起来不同,但它使用相同的编码方案。 Manipuri 语言在这里使用了一种不同的字体,它使用 Bangali 脚本。我制定了一套规则,用于将字符映射到其正确的 unicode 值。但是当我运行 s/w 时,英文文本部分也被错误地映射到 Manipuri 使其不可读,因为映射规则因为编码方案是相同的。英文文本部分应该保持不变。这是因为我的 s/w 不知道文本的哪一部分是英文,哪一部分是 Manipuri。

如何在这两种文本之间进行分类,以便将它们正确映射到正确的 unicode 值?

【问题讨论】:

  • 您不能只使用Charset.forName("...") 来使用现有功能吗?
  • @AndyTurner Charset.forName( ) 对我没有多大帮助,因为两种语言都使用相同的字符范围。唯一的区别在于字体。
  • 如果您无法知道何时在区域设置之间切换(没有控制代码或其他东西的任何东西如何正确显示此文本?),我只能建议您翻译两个,标记化和决定哪个是最有可能的,例如通过与两种语言的单词列表进行比较。
  • 跟进@AndyTurner 的评论,“我的软件不知道哪一部分是英文,哪一部分是 Manipuri”,那么 you 怎么知道哪个部分是哪种语言?

标签: java


【解决方案1】:

由于这两种语言在您的 ASCII 文本文件中使用相同或重叠的字符范围,因此无法区分英语字符和孟加拉语。您将需要开发某种类型的方案,例如将英文文本段包含在一对标记中。然后您的软件将需要搜索这些标记以更改为适合英文文本的英文字体。

【讨论】:

  • 我曾想过插入分隔符,但在我庞大且不断增长的语料库上手动插入几乎是不可能的。有没有针对此类问题的聚类或分类算法?
  • 我不知道。但是您可以通过在文本文档中包含标题来创建自己的标题。列出标题中英文文本的范围。然后在回读时使用此信息将英文字体应用于每个文本范围。
【解决方案2】:

正则表达式解决了我的问题。英语单词是严格的字母数字,不包含扩展拉丁语的字符,但另一方面,Manipuri 单词包含至少一个或多个(通常包含许多)扩展拉丁语的字符。我标记了这些行,在音译之前我检查了这个词是否是严格的字母数字。如果这个词是严格的字母数字,则表示英语,否则表示 Manipuri。这真的解决了我的问题。感谢大家与我讨论这个问题。

【讨论】:

  • 相对于您正在使用的源文本,这可能是真的;但是,在英语文本中通常不是这样。当然,没有算法会具有 ångström 精度。
  • @Tom Blodget 我同意你的意见。每个英语单词都不是严格的字母数字。但是对于我正在处理的源文本,超过 99% 的使用的英语单词都是严格的字母数字。所以,我还是要提高我的技术。
猜你喜欢
  • 1970-01-01
  • 2010-09-30
  • 2010-09-07
  • 2014-12-27
  • 1970-01-01
  • 2016-08-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多