首页 > 如何识别文本中的语言

如何识别文本中的语言

文本是utf8编码,我可以通过查找某种语言的utf8编码区间进行语言检测吗?是不是处于同一个语系的语种就不能识别?如果可以识别,怎么在 unicode.org 上找到某种语言的编码区间呢?


语言识别这个课题其实挺大的。

题主所说的通过万国码编码区间来判断,本质上是通过字母表来检测。先通过某种手段,获取各个语言的字母表,然后统计文本中每个字母表所覆盖的比例。但问题是字母表本身相互有重叠,如中文何日语,或者那一大票拉丁语言。另外,日常用语中出现多个字母表的文本也相当多,如

Segmentfalt的API太复杂了ㅠㅠ
对啊눈눈

上面的文本中出现了中韩英三种文字。尤其是第二个句子,中韩文字各占一半。所以单纯通过统计字母表覆盖比例不能灵活解决上述问题。

一个业界比较流行的做法是用Marco的Langid.py,大致上是一个基于byte n-gram的朴素贝叶斯模型,比单纯用统计字母表覆盖要好得多。作者的代码也非常明了,单个的一个python脚本就包含了全部功能,简单好用。推特曾经公布了一个自己的语言识别数据集,有兴趣可以下载下来重新训练一个自己的模型。但通常情况下自带模型已经很好用了。

业界真正的语言识别模块通常是多个方法混合起来一起用的。如首先进行字母表覆盖判断,如果能判断出来,(如阿拉伯语,泰语这样的),就直接返回结果,如果不能,可以根据词典覆盖进行判断,再不能,就通过Marco的这种模型来进行识别。

【热门文章】
【热门文章】