使用n-gram划分语言种类
使用n-gram划分语言种类

使用n-gram划分语言种类

对N-Grams的尝试

对于面试出这道题目,我的猜想是ng算法是es搜索这类分布式存储的一种模糊查询的方式。所以出了这道题目。看起来像是搞人工智能算法,但实际上确实在分布式领域用得上。

个人还是挺喜欢挑战这些有趣的算法,遂尝试了一下。

个人理解,ng算法就是将文本转化成按n个字母划分,并用出现频率排序的一种标识文本特征的算法。

第一步:将文本按照以n为大小的窗口滑动取值,将结果放入哈希map,若已经存在了,把value加一

第二步:将这个哈希map的数据放入vector数组,用自己写的sort进行排序,以频数优先,频数相等,用字典序排先后。这个排好序的vector就是ng算法的特征输出了。

第三步:获得两个vector,将要识别文本的vector,以<grams(特征值),频数排名>存入哈希map。

遍历训练文本的vector,在哈希map中查找,若存在,则计算当前vector的下标和map中对应排名的绝对值。将其累加。若不存在,则这个绝对值为数组长度(使用一个最大值,代表距离最远)。

第四步:重复第三步,获取一系列的绝对值和对应分类名称。按绝对值升序排序,作为预测分类输出。

 

所以按理说,使用训练文本来预测,一定绝对值是0,这样才是正确的。

PS:

但是不知道为什么,示例里的芬兰语文章,预测出来是英语,但是摘取网上的芬兰语文章预测结果是正确的。摘取网上其他种类语言也都能正确预测。也许是需要其他的细节上的改进。

PS:

这个输入输出要求真严格2333.

一些测试用例与结果

下图是一个芬兰语的歌曲

芬兰语歌曲- Nyt Ja Tässä

德语文章,也是网上随便搜的

来源如图下所示

挪威语可真难找,找了个网站搜搜了https://www.startsiden.no/sok/?q=Spanx

来源如下

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注