跳转到主要内容

语音特征操作库

项目描述

DistFeat Python库

DistFeat是一个用于操作音位特征(分段/区分)的Python库。

DOI PyPI Build Status codecov Codacy Badge

安装和使用

该库可以作为任何标准Python库使用pip安装,并按以下示例代码使用

在任何标准Python环境中,可以使用以下命令安装distfeat

$ pip install distfeat

注意,上述命令将安装pyclts依赖项,但默认情况下不会下载任何版本的CLTS数据。

有关如何使用库的详细说明将在官方文档中提供。代码文档和测试用例详细说明了用法,以及以下部分。

展示

通过一个DistFeat类提供功能,该类在实例化时将自动加载标准模型

>>> import distfeat
>>> df = distfeat.DistFeat()

最常见功能,获取一个字符的属性字典,是通过.grapheme2features()方法实现的。

>>> df.grapheme2features('a')
{'anterior': True, 'approximant': True, 'back': False, 'click': False, 'consonantal': False, 'constricted': False, 'continuant': True, 'coronal': True, 'distributed': True, 'dorsal': True, 'high': False, 'labial': False, 'laryngeal': True, 'lateral': False, 'long': None, 'low': True, 'nasal': False, 'pharyngeal': None, 'place': True, 'preaspirated': None, 'preglottalized': None, 'prenasal': None, 'round': None, 'sibilant': False, 'sonorant': True, 'spread': False, 'strident': False, 'syllabic': True, 'tense': True, 'voice': True}

.graphemes2features()方法默认返回一个包含布尔值的字典,具有排序的属性名称。参数允许跳过真值转换,返回用于其表示的字符串,以及返回值向量为列表。

>>> df.grapheme2features('a', t_values=False)
{'anterior': '+', 'approximant': '+', 'back': '-', 'click': '-', 'consonantal': '-', 'constricted': '-', 'continuant': '+', 'coronal': '+', 'distributed': '+', 'dorsal': '+', 'high': '-', 'labial': '-', 'laryngeal': '+', 'lateral': '-', 'long': '0', 'low': '+', 'nasal': '-', 'pharyngeal': '0', 'place': '+', 'preaspirated': '0', 'preglottalized': '0', 'prenasal': '0', 'round': '0', 'sibilant': '-', 'sonorant': '+', 'spread': '-', 'strident': '-', 'syllabic': '+', 'tense': '+', 'voice': '+'}

>>> df.grapheme2features('a', vector=True)
[True, True, False, False, False, False, True, True, True, True, False, False, True, False, None, True, False, None, True, None, None, None, None, False, True, False, False, True, True, True]

操作相反的方法.features2graphemes()返回满足一组属性及其值的所有字符列表(这些值可以作为真值或它们的字符串提供)。可以通过drop_na参数删除未定义的值。

>>> df.features2graphemes({"consonantal": "-", "anterior": "+", "high": "-"})
['a', 'aː', 'ã', 'ãː', 'ă', 'ḁ', 'a̯', 'e', 'eː', 'ẽ', 'ẽː', 'ĕ', 'e̤', 'e̥', 'e̯', 'æ', 'æː', 'æ̃', 'æ̃ː', 'ø', 'øː', 'ø̃', 'ø̃ː', 'œ', 'œː', 'œ̃', 'œ̃ː', 'ɶ', 'ɶː', 'ɶ̃', 'ɶ̃ː']

要区分一组字符,可以使用.minimal_matrix()方法获取所需的特征的最小矩阵,该方法还允许使用字符串表示真值并使用未定义值。类似于.grapheme2features()的情况,可以通过传递一个vector参数来获取值列表。正如预期的那样,字符集越大、异质性越高,所需的特征数量也越多。下面的代码段还使用了辅助的tabulate_matrix()函数,它是tabulate库的包装器。

>>> distfeat.tabulate_matrix(df.minimal_matrix(["t", "d"]))
    constricted    laryngeal    spread    voice
--  -------------  -----------  --------  -------
d   False          True         False     True
t                  False

>>> distfeat.tabulate_matrix(df.minimal_matrix(["t", "d", "s"]))
    constricted    continuant    laryngeal    sibilant    spread    strident    voice
--  -------------  ------------  -----------  ----------  --------  ----------  -------
d   False          False         True         False       False     False       True
s                  True          False        True                  True
t                  False         False        False                 False

>>> df.minimal_matrix(["t", "d"], vector=True)
{'d': [False, True, False, True], 't': [None, False, None, None]}

上述操作的逆方法为.class_features(),它提供了一组字符集构成声类所需的特征和值的字典。请注意,尽管可能,此方法默认不会丢弃未定义值。正如预期的那样,字符集越大、异质性越高,共同的特征/值对就越少。

>>> df.class_features(["t", "d"])
{'anterior': True, 'approximant': False, 'click': False, 'consonantal': True, 'continuant': False, 'coronal': True, 'distributed': False, 'dorsal': False, 'labial': False, 'lateral': False, 'nasal': False, 'place': True, 'sibilant': False, 'sonorant': False, 'strident': False, 'syllabic': False, 'tense': False}

>>> df.class_features(["t", "d", "s"])
{'anterior': True, 'approximant': False, 'click': False, 'consonantal': True, 'coronal': True, 'distributed': False, 'dorsal': False, 'labial': False, 'lateral': False, 'nasal': False, 'place': True, 'sonorant': False, 'syllabic': False, 'tense': False}

还提供了一个简单的命令行工具用于查询数据库。

以下提供了对段落距离的实验性支持,如所示。它需要sklearn库,该库未被列为要求,因此默认情况下不会安装。由于模型和回归器未进行缓存,训练阶段可能比预期的时间长。

>>> df.distance("a", "e")
5.501464265353438
>>> df.distance("a", "u")
6.773080283814581
>>> df.distance("w", "u")
0.9799320477423237
>>> df.distance("s", "ʒ")
10.139607771554383

更改日志

版本 0.2

  • 添加了对段落距离的初始支持

版本 0.1.1

  • 添加了默认模型中缺失的不圆开口前元音
  • 添加了一个从Phoible派生的模型

版本 0.1

  • 首次公开发布

待办事项

  • 允许指定、检查和推导几何形状
  • 决定是否让.features2graphemes()默认为布尔值(即t_values=True
  • 决定在使用真值时如何指定未定义,例如在.features2graphemes()中(考虑到None不能作为值传递)
  • 将命令行工具扩展到调用大多数(如果不是所有)函数

社区准则

虽然可以直接联系作者寻求支持,但建议第三方使用GitHub标准功能,例如问题报告和拉取请求,以进行贡献、报告问题或寻求支持。

贡献准则,包括行为准则,可在CONTRIBUTING.md文件中找到。

作者和引用

该库由Tiago Tresoldi开发(tresoldi@shh.mpg.de)。

作者已从欧洲研究委员会(ERC)获得资金,资金来源于欧盟的“地平线2020”研究和创新计划(协议号ERC Grant #715618计算机辅助语言比较)。

如果您使用distfeat或与其一起分发的标准特征模型,请按以下方式引用它:

Tresoldi, Tiago (2020). DistFeat,一个用于操作段音和区别音的Python库。版本0.1.1。耶拿。DOI: 10.5281/zenodo.3902005

在BibTeX中

@misc{Tresoldi2020distfeat,
  author = {Tresoldi, Tiago},
  title = {DistFeat,  a Python library for manipulating segmental and distinctive features. Version 0.1.},
  howpublished = {\url{https://github.com/tresoldi/distfeat}},
  address = {Jena},
  year = {2020},
  doi = {10.5281/zenodo.3902005}
}

项目详情


下载文件

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

源代码分发

distfeat-0.2.tar.gz (112.6 kB 查看哈希)

上传于 源代码

构建发行版

distfeat-0.2-py3-none-any.whl (140.9 kB 查看哈希值)

上传于 Python 3

支持者