Skip to main content

ISO 639 语言代码和名称的查找实用程序

项目描述

蟒蛇-iso639

PyPI 版本 支持的 Python 版本 CircleCI 构建

python-iso639是一个 Python 包,用于访问 ISO 639 语言代码、名称和其他相关信息。

目前的特点:

  • 跨 ISO 639-1、639-2 和 639-3 映射的语言表示。
  • “猜测”给定未知语言代码或名称的语言是什么的功能。

安装

pip install python-iso639

用法

python-iso639围绕一个Language班级展开。的实例Language具有您会发现有用的属性和方法。

请注意,虽然在 PyPI 上注册的包名称是python-iso639,但运行时的实际导入名称是iso639 (这意味着您应该import iso639在 Python 代码中这样做)。

创建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

您获得None无效输入

用户输入区分大小写!

>>> None == iso639.Language.from_part3('Fra') == iso639.Language.from_name("unknown language")
True

访问属性

>>> 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

如果没有匹配,None则返回。您可能需要抓住一个潜力AttributeError

>>> lang = iso639.Language.match('not gonna find a match')
>>> lang is None
True
>>> lang.part3
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'NoneType' object has no attribute 'part3'
>>> try:
...     code = lang.part3
... except AttributeError:
...     code = None
...     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 代码
scope str {(I)ndividual, (M)acrolanguage, (S)special} 之一
type str {(A)ncient、(C)onstructed、(E)xtinct、(H)istorical、(L)iving、(S)pecial} [1] 之一
status str {(A)ctive, (R)etired} 之一,描述 ISO 639-3 代码
name str ISO 639-3 中的参考语言名称
comment str 来自 ISO 639-3 的评论
other_names List[Name] 其他印刷和倒置名称 [2]
macrolanguage str 宏语言
retire_reason str 退休原因,{(C)change, (D)uplicate, (N)on-existent, (S)plit, (M)erge} 之一
retire_change_to str 如果停用原因是 {(C)change, (D)uplicate, (M)erge} 之一,则此语言可以更改为的 ISO 639-3 代码
retire_remedy str 更新此停用语言代码的说明
retire_date datetime.date 退休生效日期

[1] 如果 ISO 639-3 代码已停用,则type属性为None,因为无法从 SIL 数据源清楚地辨别其值。

[2]Name实例具有属性printinverted,分别用于打印名称和反转名称。如果引用名称、打印名称和倒置名称都相同,则该特定(打印名称、倒置名称)对将从other_names属性中排除。例如,对于西班牙语(ISO 639-3:spa),SIL 数据源中的一个(打印名称,倒置名称)对是(西班牙语,西班牙语),但该对被排除在其列表之外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实例。如果没有匹配,None则返回。

Language是一个数据类

该类Language是一个数据类。数据集的所有功能都 适用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(2022, 3, 11)
    
  • ALL_LANGUAGESLanguage:基于包含的语言代码数据的所有对象的列表

    >>> import iso639
    >>> type(iso639.ALL_LANGUAGES)
    <class 'list'>
    >>> len(iso639.ALL_LANGUAGES)
    7910
    >>> iso639.ALL_LANGUAGES[0]
    Language(part3='aaa', scope='I', type='L', status='A', name='Ghotuo', ...)
    

链接

许可证和数据源

python-iso639代码是在 Apache 2.0 许可下发布的。有关详细信息,请参阅LICENSE.txt

支持这个包的数据源是 SIL 发布的语言代码表。请注意,SIL 资源有其使用条款

为什么另一个 ISO 639 包?

iso639iso-639都存在于 PyPI 上。但是,在撰写本文时(2022 年 5 月),它们最后一次更新是在 2016 年,似乎不再为更新语言代码而维护。 pycountry是一个很棒的包,但是如果你想要一个更轻量级的包,只包含语言代码而不是其他东西怎么办?:-)

如果您注意到 SIL 的上游 ISO 639-3 表已更新,但此包未使用最新数据,请打开 GitHub 问题ping 我。

下载文件

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

源分布

python-iso639-2022.9.17.tar.gz (276.9 kB 查看哈希

已上传 source

内置分布

python_iso639-2022.9.17-py3-none-any.whl (274.2 kB 查看哈希

已上传 py3