如何检测语言

时间:2010-07-03 22:04:59

标签: detection language-detection

是否有任何好的开源引擎用于检测文本所使用的语言,可能具有概率指标?一个我可以在本地运行,不查询谷歌或必应?我想在大约1500万页的OCR文本中检测每页的语言。

并非所有文件都包含使用拉丁字母的语言。

7 个答案:

答案 0 :(得分:8)

根据您正在做的事情,您可能需要查看python自然语言处理工具包(NLTK),它对贝叶斯学习算法有一些支持。

一般来说,字母和单词频率可能是最快的评估,但如果你需要做除识别语言以外的任何事情,NLTK(或一般的贝叶斯学习算法)可能会有用。如果您发现前两种方法的错误率太高,贝叶斯方法可能也会有用。

答案 1 :(得分:4)

为了将来参考,我最终使用的引擎是libtextcat,它是BSD许可证,但似乎自2003年以来一直没有维护。但是,它做得很好并且可以很容易地集成到我的工具链中

答案 2 :(得分:3)

您一定可以构建自己的,given some statistics关于目标语言的letter frequenciesdigraph frequencies等。

然后将其作为开源发布。而 voila ,你有一个用于检测文本语言的开源引擎!

答案 3 :(得分:2)

我认为你不需要任何非常复杂的东西 - 例如检测一个文件是否是英文的,具有相当高的确定性,只需测试它是否包含N个最常见的英文单词 - 如:

"the a an is to are in on in it"

如果它包含所有这些,我会说它几乎肯定是英语。

答案 4 :(得分:2)

尝试CLD2:

安装

sudo -H pip install cld2-cffi

运行

import cld2

res = cld2.detect("This is a sample text.")
print(res)
res = cld2.detect("Dies ist ein Beispieltext.")
print(res)
res = cld2.detect("Je ne peut pas parler cette language.")
print(res)
res = cld2.detect(" هذه هي بعض النصوص العربية")
print(res)
res = cld2.detect("这是一些阿拉伯文字")  # Chinese?
print(res)
res = cld2.detect("これは、いくつかのアラビア語のテキストです")
print(res)
print("Supports {} languages.".format(len(cld2.LANGUAGES)))

给出

Detections(is_reliable=True, bytes_found=23, details=(Detection(language_name=u'ENGLISH', language_code=u'en', percent=95, score=1675.0), Detection(language_name=u'Unknown', language_code=u'un', percent=0, score=0.0), Detection(language_name=u'Unknown', language_code=u'un', percent=0, score=0.0)))
Detections(is_reliable=True, bytes_found=27, details=(Detection(language_name=u'GERMAN', language_code=u'de', percent=96, score=1496.0), Detection(language_name=u'Unknown', language_code=u'un', percent=0, score=0.0), Detection(language_name=u'Unknown', language_code=u'un', percent=0, score=0.0)))
Detections(is_reliable=True, bytes_found=38, details=(Detection(language_name=u'FRENCH', language_code=u'fr', percent=97, score=1134.0), Detection(language_name=u'Unknown', language_code=u'un', percent=0, score=0.0), Detection(language_name=u'Unknown', language_code=u'un', percent=0, score=0.0)))
Detections(is_reliable=True, bytes_found=48, details=(Detection(language_name=u'ARABIC', language_code=u'ar', percent=97, score=1263.0), Detection(language_name=u'Unknown', language_code=u'un', percent=0, score=0.0), Detection(language_name=u'Unknown', language_code=u'un', percent=0, score=0.0)))
Detections(is_reliable=False, bytes_found=29, details=(Detection(language_name=u'Unknown', language_code=u'un', percent=0, score=0.0), Detection(language_name=u'Unknown', language_code=u'un', percent=0, score=0.0), Detection(language_name=u'Unknown', language_code=u'un', percent=0, score=0.0)))
Detections(is_reliable=True, bytes_found=63, details=(Detection(language_name=u'Japanese', language_code=u'ja', percent=98, score=3848.0), Detection(language_name=u'Unknown', language_code=u'un', percent=0, score=0.0), Detection(language_name=u'Unknown', language_code=u'un', percent=0, score=0.0)))
Supports 282 languages.

其他

答案 5 :(得分:1)

你也可以尝试使用Ruby的WhatLanguage gem,它既简单又简单,而且我用于Twitter数据分析。查看:http://www.youtube.com/watch?v=lNqZ2cqOReo&list=UUJ_3fstMOH-g4yBxtvgAWkw&index=0&feature=plcp进行快速演示

答案 6 :(得分:1)

结帐Franc on Github。它是用JavaScript编写的,因此您可以在浏览器中使用,也可以在Node中使用。

  
      
  • franc支持的语言数量超过任何其他图书馆或Google;
  •   
  • franc很容易分叉,支持335种语言;法郎就像
  • 一样   
  • 比赛快。
  •