在Python中检测字母字符属于哪些

问题描述 投票:0回答:2

有没有库或其他简单的方法来检测Python中的字母字符属于哪些?我知道我可以为此使用 unicode 代码范围,但如果已经有内置方式或库或某些提供映射的此类方式,我宁愿不重新发明轮子。

注意:我问的是字母而不是语言。 “hello”和“hola”都将映射到拉丁字母,而“Поиск”将映射到西里尔字母。

python nlp
2个回答
4
投票

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

0
投票

我能找到的最接近解决这个问题的方法是使用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'}

© www.soinside.com 2019 - 2024. All rights reserved.