跳转到主要内容

ISO 639语言代码、名称和其他相关信息

项目描述

python-iso639

PyPI version Supported Python versions PyPI downloads last month CircleCI Builds

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 实例具有 printinverted 属性,分别对应打印名称和倒置名称。如果参考名称、打印名称和倒置名称都相同,则该特定的(打印名称,倒置名称)对将不包括在 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上已经存在两个包:iso639iso-639。然而,截至本文撰写时间(2022年5月),它们最后更新于2016年,似乎已经不再维护以更新语言代码。《pycountry》是一个优秀的包,但如果您只需要仅包含语言代码的更轻量级包怎么办?:-)

如果您注意到SIL的ISO 639-3表已更新,但此包仍未使用最新数据,请通过创建GitHub问题联系我。

项目详情


下载文件

下载适用于您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源分布

python_iso639-2024.4.27.tar.gz (279.2 kB 查看哈希值)

上传时间

构建分布

python_iso639-2024.4.27-py3-none-any.whl (274.7 kB 查看哈希值)

上传时间 Python 3

由以下机构支持