Text 如何计算字母频率相似度?

Text 如何计算字母频率相似度?,text,nlp,levenshtein-distance,letter,Text,Nlp,Levenshtein Distance,Letter,给出该数据(两种语言的相对字母频率): 然后计算字符串“this is a test”的字母频率,得到: "t"=>21.43, "s"=>14.29, "i"=>7.14, "r"=>7.14, "y"=>7.14, "'"=>7.14, "h"=>7.14, "e"=>7.14, "l"=>7.14 那么,将给定的字符串字母频率与语言匹配(并尝试检测语言)的好方法是什么?我已经看过(并测试过)一些使用levenshtein距离的示例,在

给出该数据(两种语言的相对字母频率):

然后计算字符串“this is a test”的字母频率,得到:

"t"=>21.43, "s"=>14.29, "i"=>7.14, "r"=>7.14, "y"=>7.14, "'"=>7.14, "h"=>7.14, "e"=>7.14, "l"=>7.14
那么,将给定的字符串字母频率与语言匹配(并尝试检测语言)的好方法是什么?我已经看过(并测试过)一些使用levenshtein距离的示例,在添加更多语言之前,它似乎工作得很好

"this is a test" gives (shortest distance:) [:english, 13] ...
"esto es una prueba" gives (shortest distance:) [:spanish, 13] ...

你举的例子每个都有一个简短的句子。统计数据表明,如果您的输入较长(例如段落),则应更容易识别唯一频率

如果您不能依靠用户提供更长的输入,那么如果字母频率匹配,也可以在语言中查找常用词(例如is、as、and、but…)。

您是否考虑使用来确定两个向量之间的相似程度?

第一个向量是从测试字符串(待分类)中提取的字母频率,第二个向量是针对特定语言的

您当前正在提取单字母频率(Unigram)。我建议提取更高的阶数,例如双字母或三字母(如果您有足够的训练数据,甚至更大)。例如,对于双字母,您将计算“aa”、“ab”、“ac”…“zz”的频率,这将允许您提取比仅考虑单个字符频率更多的信息

不过要小心,因为使用高阶n-gram时需要更多的训练数据,否则,对于以前没有见过的字符组合,将有许多0-value

此外,第二种可能性是使用(术语频率逆文档频率)权重,而不是使用纯字母(术语)频率

研究 下面是一个很好的幻灯片,它使用了机器学习分类器(但也有一些其他的好信息)


这是一篇你可能也会发现很有用的短文。

n-graphs当然对短文很有帮助,而且帮助很大。对于任何长度合理的文本(一段?),简单的字母频率都很好。作为一个例子,我写了一个简短的演示,你可以在


这是页面上的最后一个示例。

我看到的示例并不关心字母频率的实际百分比,它们只是将所有字母缩减为一个字符串,因此“英语字母频率”将是:“eaosn”,而“西班牙语字母频率:”etaon“。然后他们计算给定字符串的字母频率,并执行相同的操作,然后计算这些字符串之间的levenshtein距离。对,我正在考虑实现第一个字母频率和有向图/三向图频率,以获得更准确的结果
"this is a test" gives (shortest distance:) [:english, 13] ...
"esto es una prueba" gives (shortest distance:) [:spanish, 13] ...