ISO 639语言代码、名称和其他相关信息
项目描述
python-iso639
python-iso639
是一个Python包,用于ISO 639语言代码、名称和其他相关信息。
当前功能
- 在ISO 639-1、639-2和639-3之间映射的语言表示。
- 为给定的未知语言代码或名称“猜测”语言的功能。
安装
pip install python-iso639
使用
python-iso639
围绕一个 Language
类。 Language
的实例具有您会发现有用的属性和方法。
请注意,尽管在PyPI上注册的包名为 python-iso639
,但运行时的实际导入名为 iso639
(这意味着您应该在Python代码中执行 import iso639
)。
创建 Language
实例
通过以下方法之一创建 Language
实例。
from_part3
,使用ISO 639-3代码
>>> import iso639
>>> lang1 = iso639.Language.from_part3('fra')
>>> type(lang1)
<class 'iso639.language.Language'>
>>> lang1
Language(part3='fra', part2b='fre', part2t='fra', part1='fr', scope='I', type='L', name='French', comment=None, other_names=None, macrolanguage=None, retire_reason=None, retire_change_to=None, retire_remedy=None, retire_date=None)
从另一个ISO 639代码集或参考名称
>>> lang2 = iso639.Language.from_part2b('fre') # ISO 639-2 (bibliographic)
>>> lang3 = iso639.Language.from_part2t('fra') # ISO 639-2 (terminological)
>>> lang4 = iso639.Language.from_part1('fr') # ISO 639-1
>>> lang5 = iso639.Language.from_name('French') # ISO 639-3 reference language name
对于无效输入,将引发 LanguageNotFoundError
>>> iso639.Language.from_part3('Fra') # The user input is case-sensitive!
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
LanguageNotFoundError: 'Fra' isn't an ISO language code or name
>>>
>>> iso639.Language.from_name("unknown language")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
LanguageNotFoundError: 'unknown language' isn't an ISO language code or name
访问属性
>>> lang1
Language(part3='fra', part2b='fre', part2t='fra', part1='fr', scope='I', type='L', name='French', comment=None, other_names=None, macrolanguage=None, retire_reason=None, retire_change_to=None, retire_remedy=None, retire_date=None)
>>> lang1.part3
'fra'
>>> lang1.name
'French'
比较
>>> lang1 == lang2 == lang3 == lang4 == lang5 # All are French
True
>>> lang6 = iso639.Language.from_part3('spa') # Spanish
>>> lang1 == lang6 # French vs. Spanish
False
>>> 'French' == lang1.name == lang2.name == lang3.name == lang4.name == lang5.name
True
>>> lang6.name
'Spanish'
猜测语言:类方法 match
您不知道您的输入来自哪个代码集或名称?请使用 match
类方法
>>> lang1 = iso639.Language.match('fra')
>>> lang2 = iso639.Language.match('fre')
>>> lang3 = iso639.Language.match('fr')
>>> lang4 = iso639.Language.match('French')
>>> lang1 == lang2 == lang3 == lang4
True
类方法 match
特别适用于从未知输入中一致地访问特定属性,例如 ISO 639-3 代码。
>>> 'fra' == lang1.part3 == lang2.part3 == lang3.part3 == lang4.part3
True
如果没有匹配项,则会引发 LanguageNotFoundError
,您可能希望捕获此错误
>>> try:
... lang = iso639.Language.match('not gonna find a match')
... except iso639.LanguageNotFoundError:
... print("no match found!")
...
no match found!
宏观语言和备选名称
>>> language = iso639.Language.match('yue')
>>> language.name
'Yue Chinese' # also commonly known as Cantonese
>>> language.macrolanguage
'zho' # Chinese
>>> language.other_names
[Name(print='Yue Chinese', inverted='Chinese, Yue')]
>>> for name in language.other_names:
... print(f'{name.print} | {name.inverted}')
...
Yue Chinese | Chinese, Yue
已停用的语言代码
>>> language = iso639.Language.match('bvs')
>>> language.part3
'bvs'
>>> language.name
'Belgian Sign Language'
>>> language.status
'R' # (R)etired
>>> language.retire_reason
'S' # (S)plit
>>> language.retire_change_to is None
True
>>> language.retire_remedy
'Split into Langue des signes de Belgique Francophone [sfb], and Vlaamse Gebarentaal [vgt]'
>>> language.retire_date
datetime.date(2007, 7, 18)
深入细节
Language
实例的属性
Language
实例具有以下属性
属性 | 数据类型 | 它可以是 None 吗? |
描述 |
---|---|---|---|
part3 |
str |
✗ | ISO 639-3 代码 |
part2b |
str |
✓ | ISO 639-2 代码(文献) |
part2t |
str |
✓ | ISO 639-2 代码(术语) |
part1 |
str |
✓ | ISO 639-1 代码 |
范围 |
str |
✗ | 以下之一 {(I)ndividual, (M)acrolanguage, (S)pecial} |
类型 |
str |
✓ | 以下之一 {(A)ncient, (C)onstructed, (E)xtinct, (H)istorical, (L)iving, (S)pecial} [1] |
状态 |
str |
✗ | 以下之一 {(A)ctive, (R)etired)},描述 ISO 639-3 代码 |
名称 |
str |
✗ | ISO 639-3 中的参考语言名称 |
注释 |
str |
✓ | 来自 ISO 639-3 的注释 |
其他名称 |
名称列表 |
✓ | 其他打印和倒置名称 [2] |
宏观语言 |
str |
✓ | 宏观语言 |
停用原因 |
str |
✓ | 停用原因,以下之一 {(C)hange, (D)uplicate, (N)on-existent, (S)plit, (M)erge} |
停用更改到 |
str |
✓ | 如果停用原因是 {(C)hange, (D)uplicate, (M)erge},则可以更改此语言的 ISO 639-3 代码 |
停用补救措施 |
str |
✓ | 更新此已停用语言代码的说明 |
停用日期 |
datetime.date |
✓ | 停用生效的日期 |
[1] 如果 ISO 639-3 代码已停用,则 type
属性为 None
,因为其值无法从 SIL 数据源中清楚地辨别。
[2] Name
实例具有 print
和 inverted
属性,分别对应打印名称和倒置名称。如果参考名称、打印名称和倒置名称都相同,则该特定的(打印名称,倒置名称)对将不包括在 other_names
属性中。例如,对于西班牙语(ISO 639-3: spa),来自 SIL 数据源的一个(打印名称,倒置名称)对是(Spanish,Spanish),但该对不包括在其 other_names
列表中。
Language.match
如何匹配语言
从高层次来看,Language.match
假设输入更有可能是语言代码而不是语言名称。除此之外,匹配的确切顺序如下
- ISO 639-3 代码(在活动代码中)
- ISO 639-2(文献)代码
- ISO 639-2(术语)代码
- ISO 639-1 代码
- ISO 639-3 代码(在已停用代码中)
- ISO 639-3 参考语言名称
- ISO 639-3 备选语言名称(“打印”名称)
- ISO 639-3 备选语言名称(“倒置”名称)
只进行精确匹配(没有进行任何类型的模糊字符串匹配)。一旦找到匹配项,Language.match
就返回一个 Language
实例。如果没有匹配项,则会引发 LanguageNotFoundError
。
Language
是一个数据类
Language
类是一个数据类。所有与 dataclasses 相关的功能都适用于 Language
及其实例,例如,dataclasses.asdict
>>> import dataclasses, iso639
>>> language = iso639.Language.match('fra')
>>> dataclasses.asdict(language)
{'part3': 'fra', 'part2b': 'fre', 'part2t': 'fra', 'part1': 'fr', 'scope': 'I', 'type': 'L', 'status': 'A', 'name': 'French', 'comment': None, 'other_names': None, 'macrolanguage': None, 'retire_reason': None, 'retire_change_to': None, 'retire_remedy': None, 'retire_date': None}
常量
-
DATA_LAST_UPDATED
:包含的语言代码数据从 SIL 的发布日期>>> import iso639 >>> iso639.DATA_LAST_UPDATED datetime.date(2024, 4, 15)
-
ALL_LANGUAGES
:基于包含的语言代码数据的所有Language
对象的列表>>> import iso639 >>> type(iso639.ALL_LANGUAGES) <class 'list'> >>> len(iso639.ALL_LANGUAGES) 7920 >>> iso639.ALL_LANGUAGES[0] Language(part3='aaa', scope='I', type='L', status='A', name='Ghotuo', ...)
链接
许可证和数据源
python-iso639
代码在 Apache 2.0 许可证下发布。请参阅 LICENSE.txt 以获取详细信息。
支持该包的数据源是SIL发布的语言代码表。请注意,SIL资源有自己的使用条款。有关数据如何包含在包中的详细信息,请参阅脚本scripts/create_languages_db.py
。
为什么还需要另一个ISO 639包?
PyPI上已经存在两个包:iso639和iso-639。然而,截至本文撰写时间(2022年5月),它们最后更新于2016年,似乎已经不再维护以更新语言代码。《pycountry》是一个优秀的包,但如果您只需要仅包含语言代码的更轻量级包怎么办?:-)
如果您注意到SIL的ISO 639-3表已更新,但此包仍未使用最新数据,请通过创建GitHub问题联系我。
项目详情
下载文件
下载适用于您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。
源分布
构建分布
python_iso639-2024.4.27.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 97e63b5603e085c6a56a12a95740010e75d9134e0aab767e0978b53fd8824f13 |
|
MD5 | 27233d7886065805b5e4b87a7ace2d13 |
|
BLAKE2b-256 | ffd9fbab4ccc1a712b989b28c1c964c94096aa4b44770245a49439532e787416 |
python_iso639-2024.4.27-py3-none-any.whl的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 27526a84cebc4c4d53fea9d1ebbc7209c8d279bebaa343e6765a1fc8780565ab |
|
MD5 | 301ed9f7cd033a1c9e8db1267b313116 |
|
BLAKE2b-256 | 01085e649cf18dec750d498c53c6c8eb1d9790752ebd50fa7f7e69cc0c277cfe |