gpt4 book ai didi

java - 如何识别 Java 中文本文档的语言?

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:12:41 24 4
gpt4 key购买 nike

是否有现有的 Java 库可以告诉我字符串是否包含英语文本(例如,我需要能够区分法语或意大利语文本——该函数需要为法语和意大利语返回 false,并返回 true英语)?

最佳答案

有多种技术,一个稳健的方法会结合各种技术:

  • 查看文本中 n 个字母组(例如,3 个字母组或 trigrams)的频率,看看它们是否与您正在测试的语言的频率相似
  • 查看给定语言中的常用词实例是否与文本中的频率匹配(这对于较长的文本来说效果更好)
  • 文本中是否包含字符以将其缩小为特定语言? (例如,如果文本包含倒置的问号,则很有可能是西类牙语)
  • 您能否“松散地解析”文本中指示特定语言的某些特征,例如如果它包含与以下正则表达式的匹配项,则可以将其视为该语言是法语的有力线索:

    \bvous\s+\p{L}+ez\b

为了帮助您入门,这里有英语、法语和意大利语的常见三连词和字数统计(从一些代码中复制和粘贴——我将把它留作解析它们的练习):

  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",

(八字计数为每百万个字符;字数为每百万个字。'_' 字符表示字边界。)

我记得,这些数字是在《牛津计算语言学家手册》中引用的,并且是基于报纸文章的样本。如果您有这些语言的文本语料库,您自己就可以很容易地得出类似的数字。

如果您想要一种真正快捷的方式来应用上述内容,请尝试:

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

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

关于java - 如何识别 Java 中文本文档的语言?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/431159/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com