更具体地说,我试图检查给定的字符串(一个句子)是否是土耳其语.
我可以检查字符串是否有土耳其字符,例如Ç,Ş,Ü,Ö,Ğ等.但是这不是很可靠,因为在我收到字符串之前可能会转换为C,S,U,O,G.
另一种方法是在土耳其语中使用100个最常用的单词并检查句子是否包含这些单词中的任何/一些.我可以结合这两种方法并使用点系统.
您认为在Python中解决我的问题最有效的方法是什么?
相关问题:( 人类)文档语言(Perl,Google Translation API)
一种选择是使用贝叶斯分类器,如牧师.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')
使用更复杂的令牌集进行训练可以增强结果.有关贝叶斯分类的更多信息,请参阅此处和此处.
我以前用过的简单统计方法:
以您想要检测的语言获取大量样本培训文本.将其分成三字符,例如
三连词中的"你好foobar"是:'Hel','ell','llo','lo','o f','fo','foo','oob','oba','bar'
对于所有源数据,计算每个三元组的出现频率,可能是在一个字典中,其中key = trigram和value = frequency.如果需要,您可以将此限制为前300个最常见的3个字母组合或其他内容.把某个字谜剔掉.
要判断是否使用相同语言编写新的文本样本,请对示例文本重复上述步骤.现在,您所要做的就是计算样本三元组频率和训练三元组频率之间的相关性.您需要稍微玩一下才能选择一个阈值相关性,您可以将其视为土耳其与否.
这种方法已被证明是高度准确的,击败了更复杂的方法,参见
Cavnar&Trenkle(1994):"基于N-Gram的文本分类"
使用三字母组合解决了使用单词列表的问题,因为在任何给定语言中存在大量单词,特别是在给定不同语法排列的情况下.我试过寻找常用词,问题是他们经常对其他语言给出误报,或者他们自己有很多排列.统计方法不需要大量存储空间,也不需要复杂的解析.顺便说一下,这种方法仅适用于具有语音书写系统的语言,如果使用的是使用表意语言的语言(即中文,日文,韩文),它的效果很差.
或者维基百科在其方便的语言识别图表中有一个关于土耳其语的部分.