有没有库或其他简单的方法来检测Python中的字母字符属于哪些?我知道我可以为此使用 unicode 代码范围,但如果已经有内置方式或库或某些提供映射的此类方式,我宁愿不重新发明轮子。
注意:我问的是字母而不是语言。 “hello”和“hola”都将映射到拉丁字母,而“Поиск”将映射到西里尔字母。
Python 的 unicodedata 在这里非常有帮助,就像 这个问题/答案
如果不编写整个模块,我找不到任何简单的方法来检测语言,而且我认为我会遇到很多极端情况,所以我编写了一个库。 Github 页面位于这里。这样,您就可以:
pip install alphabet-detector
然后直接使用:
from alphabet_detector import AlphabetDetector
ad = AlphabetDetector()
ad.only_alphabet_chars(u"ελληνικά means greek", "LATIN") #False
ad.only_alphabet_chars(u"ελληνικά", "GREEK") #True
ad.only_alphabet_chars(u"frappé", "LATIN") #True
ad.only_alphabet_chars(u"hôtel lœwe", "LATIN") #True
ad.only_alphabet_chars(u"123 ångstrom ð áß", "LATIN") #True
ad.only_alphabet_chars(u"russian: гага", "LATIN") #False
ad.only_alphabet_chars(u"гага", "CYRILLIC") #True
我还写了一些主要语言的便捷方法:
ad.is_cyrillic(u"гага") #True
ad.is_latin(u"howdy") #True
ad.is_cjk(u"hi") #False
ad.is_cjk(u'汉字') #True
我能找到的最接近解决这个问题的方法是使用https://pypi.org/project/uniscripts/,它已经多年没有更新了,但通过从 unicode 标准中提取脚本来提供正确的方法。
我将 uniscripts 更新为 unicode 15.1 并向包维护者提交了合并请求。同时您可以从我的存储库中使用它:
pip install git+https://github.com/gaspardpetit/uniscripts.git
然后:
>>> is_script(u"ελληνικά means greek", Scripts.LATIN)
False
>>> is_script(u"ελληνικά", Scripts.GREEK)
True
>>> is_script(u"гага", Scripts.CYRILLIC)
True
alphabet-detector
对我来说不可靠,因为它返回角色名称的第一个单词,这通常是脚本名称,但并非总是如此。例如:
>>> ad.detect_alphabet("𐲌")
{'OLD'}
>>> ad.detect_alphabet("º")
{'MASCULINE'}
uniscripts
另一方面正确返回:
>>> ad.detect_alphabet("𐲌")
{'Old_Hungarian'}
>>> ad.detect_alphabet("º")
{'Latin', 'Common'}