对于较大的文本副本,通常使用字母,有向图,甚至有向图的分布,并与要检测的语言的已知分布进行比较。
但是,单个句子很可能太短而无法产生任何有用的统计量度。然后,将单个单词与词典进行匹配可能会比较幸运。
0
对于较大的文本副本,通常使用字母,有向图,甚至有向图的分布,并与要检测的语言的已知分布进行比较。
但是,单个句子很可能太短而无法产生任何有用的统计量度。然后,将单个单词与词典进行匹配可能会比较幸运。
0
如果您对执行语言检测的机制感兴趣,请参考以下文章 (基于python),该文章使用(非常)幼稚的方法,但是特别是对机器学习 (尤其是机器学习 )的一个很好的介绍。大词)。
对于Java实现,其他消息者建议的JLangDetect和Nutch相当不错。还可以看一下Lingpipe , JTCL和NGramJ 。
对于同一页面中有多种语言的问题,可以使用句子边界检测器将页面切成句子,然后尝试识别每个句子的语言。假设一个句子仅包含一种(主要)语言,那么使用上述任何一种实现方式,您仍应获得良好的结果。
注意:句子边界检测器(SBD)在理论上是特定于语言的(鸡-蛋问题,因为您需要另一个)。但是对于基于拉丁语的语言(英语,法语,德语等),它们主要使用句点(除了感叹号等)来进行句子定界,即使您使用为英语设计的SBD,也将获得可接受的结果。我写了一个基于规则的英语SBD,对法语文本效果很好。对于实现,请看一下OpenNLP 。
使用SBD的另一种选择是使用说10个令牌(用空格分隔)的滑动窗口来创建伪句子 (PS),并尝试识别语言改变的边界。这样做的缺点是,如果整个文档都有n个标记,则将对长度为10个标记的字符串执行大约n-10个分类操作。在另一种方法中,如果平均句子有10个标记,则您将执行大约n / 10个分类操作。如果文档中n = 1000个单词,您将比较990个操作与100个操作:数量级差。
如果您有简短的短语(少于20个字符),则根据我的经验,语言检测的准确性会很差。特别是在专有名词以及跨“巧克力”之类的语言使用相同名词的情况下。例如,“ New York”是法语单词中的英语单词还是法语单词?
0
尽管比您正在寻找的解决方案更复杂,但是您可以使用Vowpal Wabbit并使用来自不同语言的句子对其进行训练。
从理论上讲,您可以为文档中的每个句子取回一种语言。
(不要被项目字幕中的“在线”所迷惑-只是为了学习而数学,而不必将整个学习材料存储在内存中)
0
NGramJ似乎是最新的:
http://ngramj.sourceforge.net/
它还具有面向字符和面向字节的配置文件,因此它也应该能够识别字符集。
对于使用多种语言的文档,您需要标识字符集( ICU4J具有一个可以执行此操作的CharsetDetector ),然后将文本分割为多个行换行符或段落(如果标记了文本)等合理的内容。
0
查找马尔可夫链。
基本上,您需要统计上要识别的语言样本。当您获得一个新文件时,请查看特定音节或音素的频率,并比较预先计算的样本。选择最接近的一个。
0
有一个名为JLangDetect的软件包,它似乎完全可以满足您的要求:
langof("un texte en français") = fr : OK
langof("a text in english") = en : OK
langof("un texto en español") = es : OK
langof("un texte un peu plus long en français") = fr : OK
langof("a text a little longer in english") = en : OK
langof("a little longer text in english") = en : OK
langof("un texto un poco mas largo en español") = es : OK
langof("J'aime les bisounours !") = fr : OK
langof("Bienvenue à Montmartre !") = fr : OK
langof("Welcome to London !") = en : OK
// ...
编辑:正如Kevin所指出的那样,在Nutch项目中 ,由org.apache.nutch.analysis.lang包提供了类似的功能。
0
假设我们有一个文本文件,内容为:“ Je suis un beau homme ...”
另一个带有:“我是一个勇敢的人”
第三个带有德语文本:“ Guten morgen。Wie geht的?”
我们如何编写一个告诉我们的函数:第一个文件中的文本很有可能是英语,第二个文件中有法语等?
欢迎链接到书籍/开箱即用的解决方案。我用Java编写,但是如果需要,我可以学习Python。
我的评论