首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在Java中识别文本文档的语言?

如何在Java中识别文本文档的语言?
EN

Stack Overflow用户
提问于 2019-04-07 23:59:58
回答 2查看 0关注 0票数 0

是否有现有的Java库可以告诉我String是否包含英语语言文本(例如,我需要能够区分法语或意大利语文本 - 该函数需要为法语和意大利语返回false,对于英语是真的) ?

EN

回答 2

Stack Overflow用户

发布于 2019-04-08 08:14:57

您可以尝试将每个单词与英语,法语或意大利语词典进行比较。请记住,虽然某些单词可能出现在多个词典中。

票数 0
EN

Stack Overflow用户

发布于 2019-04-08 09:55:24

有各种技术,强大的方法将结合各种技术:

  • 查看文本n个字母组(例如,3个字母或三字母)的频率,看它们是否与您测试的语言的频率相似
  • 查看给定语言中频繁单词实例是否与文本中找到的频率相匹配(这对于较长的文本更有效
  • 文本是否包含其缩小到特定语言的字符?(例如,如果文本中包含一个颠倒的问号,则很有可能是西班牙语)
  • 你可以“松散地解析”文本中某些特定语言的特征,例如,如果它包含与下面正则表达式的匹配,你可以把它作为语言法语的强有力线索: \ B您\ S + \ p {L} + EZ \ b

为了帮助您入门,以下是英语,法语和意大利语的频繁三字和字数统计(从某些代码中复制和粘贴 - 我将其作为练习来解析它们):

代码语言:javascript
复制
  Locale.ENGLISH,
      "he_=38426;the=38122;nd_=20901;ed_=20519;and=18417;ing=16248;to_=15295;ng_=15281;er_=15192;at_=14219",
      "the=11209;and=6631;to=5763;of=5561;a=5487;in=3421;was=3214;his=2313;that=2311;he=2115",
  Locale.FRENCH,
      "es_=38676;de_=28820;ent=21451;nt_=21072;e_d=18764;le_=17051;ion=15803;s_d=15491;e_l=14888;la_=14260",
      "de=10726;la=5581;le=3954;" + ((char)224) + "=3930;et=3563;des=3295;les=3277;du=2667;en=2505;un=1588",
  Locale.ITALIAN,
      "re_=7275;la_=7251;to_=7208;_di=7170;_e_=7031;_co=5919;che=5876;he_=5622;no_=5546;di_=5460",
      "di=7014;e=4045;il=3313;che=3006;la=2943;a=2541;in=2434;per=2165;del=2013;un=1945",

(Trigram计数是每百万个字符;单词计数是每百万个单词。'_'字符表示单词边界。)

我记得,这些数字在牛津计算语言学家手册中引用,并以报纸文章样本为基础。如果你有这些语言的文本语料库,那么自己很容易得出类似的数字。

如果您想要一种非常快速和肮脏的方式来应用上述方法,请尝试:

  • 考虑文本中三个字符的每个序列(用'_'替换单词边界)
  • 对于与给定语言的一个频繁匹配的每个三元组,将该语言的“分数”增加1(更复杂的是,您可以根据列表中的位置加权)
  • 最后,假设语言是得分最高的
  • 可选地,对常用单词执行相同操作(组合分数)

显然,这可以进行改进,但是您可能会发现这个简单的解决方案足以满足您的需求,因为您基本上对“英语与否”感兴趣。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100001081

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档