Python – 我能检测unicodestring语言代码吗?

我面临的情况是,我正在阅读一串文本,我需要检测语言代码(en,de,fr,sp等)。 有一个简单的方法来做到这一点在Python中? 谢谢。

如果您需要检测用户操作的语言,则可以使用Google ajax语言API :

#!/usr/bin/env python import json import urllib, urllib2 def detect_language(text, userip=None, referrer="http://stackoverflow.com/q/4545977/4279", api_key=None): query = {'q': text.encode('utf-8') if isinstance(text, unicode) else text} if userip: query.update(userip=userip) if api_key: query.update(key=api_key) url = 'https://ajax.googleapis.com/ajax/services/language/detect?v=1.0&%s'%( urllib.urlencode(query)) request = urllib2.Request(url, None, headers=dict(Referer=referrer)) d = json.load(urllib2.urlopen(request)) if d['responseStatus'] != 200 or u'error' in d['responseData']: raise IOError(d) return d['responseData']['language'] print detect_language("Python - can I detect unicode string language code?") 

产量

 en 

Google Translate API v2

默认限制100000个字符/天(一次不超过5000个字符)。

 #!/usr/bin/env python # -*- coding: utf-8 -*- import json import urllib, urllib2 from operator import itemgetter def detect_language_v2(chunks, api_key): """ chunks: either string or sequence of strings Return list of corresponding language codes """ if isinstance(chunks, basestring): chunks = [chunks] url = 'https://www.googleapis.com/language/translate/v2' data = urllib.urlencode(dict( q=[t.encode('utf-8') if isinstance(t, unicode) else t for t in chunks], key=api_key, target="en"), doseq=1) # the request length MUST be < 5000 if len(data) > 5000: raise ValueError("request is too long, see " "http://code.google.com/apis/language/translate/terms.html") #NOTE: use POST to allow more than 2K characters request = urllib2.Request(url, data, headers={'X-HTTP-Method-Override': 'GET'}) d = json.load(urllib2.urlopen(request)) if u'error' in d: raise IOError(d) return map(itemgetter('detectedSourceLanguage'), d['data']['translations']) 

现在您可以请求明确地检测一种语言 :

 def detect_language_v2(chunks, api_key): """ chunks: either string or sequence of strings Return list of corresponding language codes """ if isinstance(chunks, basestring): chunks = [chunks] url = 'https://www.googleapis.com/language/translate/v2/detect' data = urllib.urlencode(dict( q=[t.encode('utf-8') if isinstance(t, unicode) else t for t in chunks], key=api_key), doseq=True) # the request length MUST be < 5000 if len(data) > 5000: raise ValueError("request is too long, see " "http://code.google.com/apis/language/translate/terms.html") #NOTE: use POST to allow more than 2K characters request = urllib2.Request(url, data, headers={'X-HTTP-Method-Override': 'GET'}) d = json.load(urllib2.urlopen(request)) return [sorted(L, key=itemgetter('confidence'))[-1]['language'] for L in d['data']['detections']] 

例:

 print detect_language_v2( ["Python - can I detect unicode string language code?", u"матрёшка", u"打水"], api_key=open('api_key.txt').read().strip()) 

产量

 [u'en', u'ru', u'zh-CN'] 

看一下猜测语言 :

尝试确定select的Unicode(utf-8)文本的自然语言。

但正如名字所说,它猜测的是语言。 你不能指望100%正确的结果。

看看自然语言工具包和自动语言识别使用Python的想法。

我想知道一个贝叶斯filter是否可以让语言正确,但是我现在不能写一个概念certificate。

在我的情况下,我只需要确定两种语言,所以我只是检查第一个字符:

 import unicodedata def is_greek(term): return 'GREEK' in unicodedata.name(term.strip()[0]) def is_hebrew(term): return 'HEBREW' in unicodedata.name(term.strip()[0]) 

这里有用的文章表明这个开源的CLD是在python中检测语言的最佳select。

文章展示了三种解决scheme之间的速度和准确性的比较:

  1. 语言检测或其Python端口langdetect
  2. 提卡
  3. 铬语言检测(CLD)

我浪费了我的时间langdetect现在我切换到CLD这比langdetect快16倍,并具有98.8%的准确性

尝试Universal Encoding Detector是从Firefox到Python的chardet模块的端口。

如果只有可能的语言数量有限,可以使用每种语言的一组词典(可能只包括最常见的词),然后在字典中检查input中的单词。