C ++中的Word语言检测

时间:2011-04-04 11:29:53

标签: c++

在Google上搜索后,我不知道有任何标准方法或库来检测特定单词是否属于哪种语言。

假设我有任何语言,我怎么能找到它是哪种语言:英语,日语,意大利语,德语等。

是否有可用于C ++的库?任何有关这方面的建议都将不胜感激!

8 个答案:

答案 0 :(得分:4)

我发现Google's CLD非常有用,它是用C ++编写的,并且来自他们的网站:

“CLD(紧凑语言检测器)是嵌入在谷歌Chromium浏览器中的库。该库从提供的UTF8文本(纯文本或HTML)中检测语言。它是用C ++实现的,具有非常基本的Python绑定。”

答案 1 :(得分:2)

那么,

统计训练的语言检测器在单字输入方面的效果令人惊讶,但显然有些情况下它们无法正常工作,正如其他人所观察到的那样。

在Java中,我会将您发送给Apache Tika。它有一个开源统计语言检测器。

对于C ++,您可以使用JNI来调用它。现在,是免责声明警告的时候了。由于你特别要求使用C ++,并且由于我不知道C ++免费替代品,我现在将指向我的雇主的产品,这是一种统计语言检测器,原生于C ++。

http://www.basistech.com,产品名称为RLI。

答案 2 :(得分:2)

这样一个单词不能很好地工作,因为许多单词是共享的。例如,in several languages“the”表示“茶”。

语言处理库往往比这一个功能更全面,而且由于C ++是一种“高性能”语言,因此可能很难免费找到它。

然而,问题可能并不难解决。有关提示,请参阅问题的the Wikipedia article。另外一个小的support vector machine可能非常方便。只需使用相关语言中最常用的单词进行训练,您就可以在一个左右的千位左右拥有一个非常有效的“数据库”。

答案 3 :(得分:2)

简单的单词语言识别很容易。您不需要理解文本的语义。您不需要任何计算上昂贵的算法,只需要快速哈希映射。问题是,你需要大量的数据。幸运的是,您可能会在您关注的每种语言中找到单词词典。为每种语言定义一个位掩码,这样您就可以在多种语言中标记“the”这样的单词。然后,将每个语言字典读入您的哈希映射。如果该单词已经存在于其他语言中,则只需标记当前语言。

假设给定的单词是英语和法语。然后当你查找它(“商业”)将映射到ENGLISH | FRENCH,假设ENGLISH = 1,FRENCH = 2,...你会找到值3.如果你想知道这些词是否在你的只有郎,你会测试:

int langs = dict["the"];
if (langs | mylang == mylang)
   // no other language



由于会有其他语言,可能更通用的方法更好。 对于向量中设置的每个位,将1添加到相应的语言。为n个单词做这个。在大约n = 10个单词之后,在一个典型的文本中,你将有10个主导语言,可能有2个与它相关的语言(如英语/法语),你可以很有可能确定文本是英语。请记住,即使你有一个语言的文本,它仍然可以在另一个语言中有引用,所以仅仅存在一个外来词并不意味着该文档是用该语言。选择一个门槛,它会很好地工作(非常非常快)。

显然,最困难的是阅读所有词典。这不是代码问题,而是数据收集问题。幸运的是,这是你的问题,而不是我的问题。

为了加快速度,您需要预先加载哈希映射,否则最初加载它会受到伤害。如果这是一个问题,您将不得不为哈希映射编写存储和加载方法,以便有效地阻塞整个事物。

答案 4 :(得分:1)

我不会屏住呼吸。很难自动确定文本的语言。如果你拥有的只是一个单词,没有上下文,那么你需要一个包含世界上所有语言的所有单词的数据库......其大小将是令人望而却步的。

答案 5 :(得分:1)

基本上你需要一个包含所有主要语言的庞大数据库。要自动检测一段文本的语言,请选择其词典中包含文本中最多单词的语言。这不是您希望在笔记本电脑上实现的功能。

答案 6 :(得分:0)

使用所有语言对文本的前3个单词进行拼写检查(拼写检查越多,越好)。拼写错误最少的拼写为“ wins”。仅使用3个单词,从技术上来说,可以使用几种语言进行相同的拼写,但是每增加一个单词,它的可能性就会降低。这不是一个完美的方法,但我认为它在大多数情况下都可以使用。

否则,如果所有语言中的错误数量均相等,请使用默认语言。或者随机选择另外3个单词,直到获得更清晰的结果。或将拼写检查的单词数扩展到3个以上,直到获得更清晰的结果。

至于拼写检查库,有很多,我个人更喜欢HunspellNuspell可能也不错。使用个人意见和/或技术能力是一个问题。

答案 7 :(得分:-2)

我认为你正在使用的是文字而不是语音。

如果您使用UNICODE而不是为每种语言提供插槽。

因此,您可以确定特定单词的所有字符都属于此语言位。

有关unicode语言位的更多帮助,您可以使用here