2008-12-21 52 views
7

更具体地说,我试图检查给定的字符串(一个句子)是否在土耳其语。返回给定字符串的语言的最佳方法

我可以检查字符串是否带有土耳其字符,例如Ç,Ş,Ü,Ö,Ğ等。但这不是很可靠,因为这些可能会转换为C,S,U,O,G之前我收到串。

另一种方法是为具有100个最常用的词语在土耳其语中,并检查句子包括任何/一些的那些单词。我可以结合这两种方法并使用一个积分系统。

您认为在Python中解决我的问题的最有效方法是什么?

相关问题:(human) Language of a document(Perl中,谷歌翻译API)

+0

重复:http://stackoverflow.com/questions/257125/human-language-of-a-document – 2008-12-21 02:13:35

回答

14

一种选择是使用分类贝叶斯如Reverend。牧师主页给出了一个天真的语言检测器的建议:

from reverend.thomas import Bayes 
guesser = Bayes() 
guesser.train('french', 'le la les du un une je il elle de en') 
guesser.train('german', 'der die das ein eine') 
guesser.train('spanish', 'el uno una las de la en') 
guesser.train('english', 'the it she he they them are were to') 
guesser.guess('they went to el cantina') 
guesser.guess('they were flying planes') 
guesser.train('english', 'the rain in spain falls mainly on the plain') 
guesser.save('my_guesser.bay') 

使用更复杂的标记集进行训练会加强结果。有关贝叶斯分类的更多信息,请参阅see herehere

10

,我用前一个简单的统计方法:

获取您要检测的语言样本训练文本,像样的数目。将它分成卦,例如

“你好foobar”在trigrams中是: 'Hel','ell','llo','lo','o f','fo','foo','oob','oba', “酒吧”

对于所有的源数据,计数每个三元的发生频度,想必在一个字典,其中关键=卦和值=频率。如果你愿意的话,你可以将它限制在300个最常用的3个字母的组合之列。将字典浸泡在某处。

要判断是否用同一种语言编写了新的文本样本,请重复上述步骤以获取样本文本。现在,您所要做的就是计算样本三角频率与训练三角频率之间的相关性。你需要稍微玩一下,选择一个你愿意考虑输入土耳其语的门槛关系。

这种方法已经被证明是非常准确的,击败了更复杂的方法,请参阅

Cavnar & Trenkle (1994): "N-Gram-Based Text Categorization"

使用卦解决了使用单词列表的问题,因为在任何词的大量给定的语言,特别是给予不同的语法排列。我尝试寻找常用词汇,问题是他们经常为其他语言提供误报,或者他们自己有很多排列组合。统计方法不需要大量的存储空间,也不需要复杂的解析。顺便说一下,这种方法只适用于具有拼音文字系统的语言,但如果使用表意语言(即中文,日文,韩文)的语言使用该方法效果不佳。

或者维基百科在its handy language recognition chart.

-1

为什么不直接使用现有的拼写检查库在土耳其一个部分? 拼写检查多种语言,选择错误数最少的语言。

相关问题