ISO 639 语言代码和名称的查找实用程序
项目描述
蟒蛇-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
(这意味着您应该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
实例具有属性print
和inverted
,分别用于打印名称和反转名称。如果引用名称、打印名称和倒置名称都相同,则该特定(打印名称、倒置名称)对将从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_LANGUAGES
Language
:基于包含的语言代码数据的所有对象的列表>>> 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 包?
包iso639 和iso-639都存在于 PyPI 上。但是,在撰写本文时(2022 年 5 月),它们最后一次更新是在 2016 年,似乎不再为更新语言代码而维护。 pycountry是一个很棒的包,但是如果你想要一个更轻量级的包,只包含语言代码而不是其他东西怎么办?:-)
如果您注意到 SIL 的上游 ISO 639-3 表已更新,但此包未使用最新数据,请打开 GitHub 问题ping 我。
项目详情
下载文件
下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。
源分布
内置分布
python_iso639-2022.9.17 -py3-none-any.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 9c45335c81aa288a28e45e66484306e340777adac01e6cb2ee84c9909ffa3f18 |
|
MD5 | c62a98ae4677cb796783e138b5e72819 |
|
布莱克2-256 | 6e502f9cbe9bf76b1ec020afb9cdf92d0d541eb65d562c4a073a6346490508fb |