跳转到主要内容

处理语音变化的库

项目描述

alteruphono

Codacy Badge Build Status codecov

alteruphono 是一个Python库,用于对语音和语音学表示应用语音变化,旨在用于语言演化的模拟。

请记住,尽管可使用,但 alteruphono 仍在开发中。目前最好的文档是检查测试,不建议在生产中使用此库。

未来改进

  • 从现有的AST迁移到字典,主要为了速度和可移植性(即使代码可能更冗长);仍应为冻结字典
  • 缓存 parser.__call__() 调用
  • 考虑如果规则有备选方案、sound_classes或在 context 中的其他特征规则,可能需要进行更复杂的合并,并在 post 中添加对 ante 中匹配内容的回引用,这甚至可能意味着前向和后向有不同
  • 在适当的位置使用日志记录
  • 允许使用不同的边界符号,包括 "^" 和 "$"
  • 添加对集群/双元音的支持
  • 添加音高和其他超音段特征
  • 添加自定义功能
  • 研究kleene闭包

安装

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

pip install alteruphono

如何使用

详细文档可以在库源代码中找到,并将与库的配套论文一起发布;更简短的技

作为库的基本使用,可以使用 .forward().backward() 函数作为

>>> import alteruphono
>>> alteruphono.forward("# p a t e #", "p > t / _ V")
['#', 't', 'a', 't', 'e', '#']
>>> alteruphono.backward("# p a t e #", "p > t / _ V")
[['#', 'p', 'a', 't', 'e', '#'], ['#', 'p', 'a', 'p', 'e', '#']]

可以使用独立的命令行工具调用这些包装器函数

$ alteruphono forward '# p a t e #' 'p > t / _ V'
# t a t e #
$ alteruphono backward '# p a t e #' 'p > t / _ V'
['# p a t e #', '# p a p e #']

元素

我们并未探讨标注声音变化形式语法的所有细节,例如空格和制表符的灵活性或箭头的等效符号;有关完整信息,有兴趣的人可以查阅参考 PEG 语法和源代码。

AlteruPhono 通过将有序的声音变化列表应用于声音序列的文本表示来运行。

声音变化以 A -> B / C 语法标注,其组成部分称为“源”(A),“目标”

  • p 是“源”
  • b 是“目标”
  • _ a 是“上下文”
  • "pape" 是“前(序列)”
  • "bape" 是“后(序列)”

请注意,如果反向应用,一个规则将有一个后序列,但可能有多于一个的前序列。

AlteruPhono 在标准 CLDF/

目录

虽然它们不是强制性的,在某些情况下也不需要,例如当系统作为改进的搜索

字符群是由一个或多个文本字符组成的序列,其中大多数字符被接受(例外包括...)。在大多数情况下,它将对应于常见的转写系统,如国际音标(IPA),在大多数情况下对应于单个声音或音素,但这并不是强制的,字符序列(除了空白、制表符、正斜杠、方括号和花括号以及箭头之外)可以用来表示在相应目录中定义的任何片段。另外,Lexibank的斜杠符号也得到支持。Alteruphono默认提供的目录基于clts的BIPA系统。

特征是描述符...默认值来源于BIPA描述符,主要是发音描述符,但我们也包括一些特征系统。

没有必要为字符群目录指定构成每个字符群的特征,但这严重限制了可能的操作类型,特别是在建模观察到的或可能的声音变化时。

默认目录来源于BIPA...例如

片段类只是缩写。AlteruPhono默认提供的目录包括文献中常见的许多缩写,大部分是明确的。

类型

  • 字符群是由一个或多个文本字符组成的序列,代表一个片段,例如"a","kʷʰ"。

  • 是按照参考定义的特性和值的显式列表,用方括号括起来,例如"[open,front,vowel]"或"[-vowel]"。特性之间用逗号分隔,可选的空格,并可能以feature=value的格式带有特定的值;"true"和"false"的缩写是操作符"+"和"-";如果没有提供"值",则默认为"true"(因此[open,front,vowel]在内部被翻译为[open=true,front=true,vowel=true])。注意这里的反向引用(实验性)

  • 修饰符是用于修改基本值的特征包;例如,如果"V"定义了一个片段类(见下文),"V[long]"将匹配的片段集限制为长元音。

  • 片段类是按照参考定义的特征包的缩写,用于匹配一个或多个用一个或多个大写字母表示的片段,如"C"或"VL"(在默认情况下分别代表[辅音]和[长元音])。片段类可以有修饰符。

  • 标记是一个非片段信息的单个字符。定义的标记是#表示单词边界,.表示音节划分,+表示语素边界,重音标记和声调标记。请注意,一些标记,特别是超音段特征如重音和声调,在大多数情况下不会直接在写规则时引用,而是通过层次。参见关于层次的章节。

  • 焦点是一个特殊标记,用下划线表示,用于上下文中指示源和目标的位置。参见参考以讨论上下文。

  • 备选是由一个或多个片段(哪种类型?)组成的列表,用竖线分隔,如"b|p"。虽然在实际使用的几乎所有情况下,备选方案可以用包表示(如大多数词汇表中的"b|p"作为"[塞音,双唇]"),但在大多数情况下,使用备选方案更可取以提高可读性。

  • 集合是由替代片段组成的列表,其中顺序很重要,用花括号括起来并用逗号分隔,如{a,e}。顺序很重要,因为在相应的集合中,元素将根据它们的索引进行匹配:如果{a,e}{ɛ,i}匹配,所有/a/将变成/ɛ/,所有/e/将变成/i/(注意,使用标准的IPA描述符,不可能以明确的方式表达这种升高)

  • 反向引用是指向之前匹配到的段落的引用,用符号 @ 和段落的数字索引表示(例如,@2 指的是序列 "b a" 中的第二个元素,元音 /a/)。因此,反向引用可以携带身份:如果 "V s V" 表示任何元音之间的 "s",而 "a s a" 仅表示 "a" 之间的 "s",则 "V s @1" 表示两个元音相等时元音之间的任意 "s"。反向引用可以带有修饰符。

待办事项

对于 2.0 版本:- 在自动机中实现映射器支持(以及测试用例)- 在语法和自动机中实现括号支持(以及测试用例)- 考虑迁移到 ANTLR - 对于语法,考虑移除 segment 中的直接声音匹配,仅使用 alternative(可能重命名为 expression 并以适当的方式处理)- 不要收集 context,但 leftright 已在 AST 中(即,删除 position 符号)

- In Graphviz output
    - Accept a strng with a description (could be the output of the
      NLAutomata)
    - Draw borders around `source`, `target`, and `context`
    - Add indices to sequences, at least optionally
    - Accept definitions of sound classes and IPA, at least in English

旧版本

  • 在所有地方使用 logging
  • 实现基于韵律强度的自动、半自动和请求的音节划分
  • 实现来自单独存储库的两个 PEG 语法
  • 添加对自定义替换函数的支持(决定符号表示法)

手册

有两个基本元素:规则和序列。规则作用于序列,在正向方向上产生一个可能不同的序列,在反向方向上产生至少一个可能不同的序列。

遵循 CLTS、CLDF、Lingpy 和正字法配置文件的传统和实践,所提出的表示法在 "字符串" 上操作,即由 Unicode 字符表示的文本,代表一个或多个由空格分隔的序列。最常见的序列是作为 Unicode 符号表示的声音,因此,如 /haʊs/("house" 在英式发音中)这样的转写表示为 "h a ʊ s",即不考虑空格,U+0068(拉丁小写字母 H),U+0061(拉丁小写字母 A),U+028A(拉丁小写字母 UPSILON),和 U+0073(拉丁小写字母 S)。空格的使用可能一开始看起来不方便,甚至有些不寻常,但经过多年的经验,这种惯例在计算机辅助语音学转录中已被证明是有用的,因为它不仅没有对构成序列的内容做出自动假设(例如,允许用户处理完全原子的音节),而且还便于验证工作。

rule 是用 A > B / C _ D 表示法表达的一个声明,其中 C 和 D(两者均为可选),表示前面的上下文。它是常见表示法的简写,在内部映射到 C A D > B A D。虽然 A 和 B 可能表示与历史演变不同的内容,如对应关系,但它们分别被命名为 antepost,并且规则可以是真实的,即 "当在 C 前面和 D 后面时,序列 A 会变成声音序列 B"。A、B 和 C 被称为 "序列",由一个或多个 "序列" 组成。一个 "序列" 是序列的基本、基本、原子单元。

序列可以是 X 类型

  • 声音序列,如音素(如 aʒ)或用户定义的原子序列(例如,完整的音节如 baʈ͡ʂʰjou̯˨˩˦)。在大多数情况下,将使用音位学或语音学转写系统,如 IPA 或 NAPA;默认情况下,系统在 BIPA 上操作,这也有助于同形异义符等的规范化。
  • 一组特性,表示为方括号内的逗号分隔的特性值,例如 [consonant],表示所有辅音,[unrounded,open-mid,central,vowel] 表示所有与该特性包匹配的声音(即,ɜ 和带有修饰符的相同声音),等等。复杂的关联和层级可以在序列之间表示,如下文所述。默认情况下,使用的描述符系统是 BIPA 系统。
  • 声类,是特征束的常见简写,例如 K 表示 [辅音,软腭音]R 表示“共振音”(内部定义为 [辅音,-塞音])。提供了一种默认系统,如表 X 所示,用户可以替换、修改或扩展它。声类全部采用大写表示。
  • 回指,用于引用序列中的其他片段,通过 at 符号(@)和一个数字索引表示,例如 @1@3(基于1)。这些将在 X 中进行更详细的介绍。
  • 与序列相关的特殊片段包括
    • _(下划线)表示上下文中的“焦点”(来自 Hartman 2003 的名称),即 ante 和 post 序列的位置
    • #(井号)表示词边界
    • .(点)表示音节分隔

音段、声类和回指可以带有修饰符,它是一个特征束,用于修改所表达或引用的值。例如 θ[voiced] 等价于 ðC[voiceless] 将仅匹配清辅音,C[voiceless] ə @1[voiced] 将匹配无声音节,后跟一个元音音素,后跟相应的浊辅音(因此匹配如 p ə bk ə g 这样的序列,但不匹配 p ə g)。

其他非基本元素包括替代和集合。

引用方式

如果您使用 alteruphono,请按照以下方式引用:

Tresoldi, Tiago (2020). Alteruphono,一个模拟音变的工具。版本 0.3。耶拿。可在以下网址获取:https://github.com/tresoldi/alteruphono

In BibTex

@misc{Tresoldi202alteruphono,
  author = {Tresoldi, Tiago},
  title = {Alteruphono, a tool for simulating sound changes. Version 0.3.},
  howpublished = {\url{https://github.com/tresoldi/alteruphono}},
  address = {Jena},
  year = {2020},
}

作者

Tiago Tresoldi (tresoldi@shh.mpg.de)

作者在开发过程中得到了 ERC Grant #715618 的支持,该资助项目是 CALC(计算机辅助语言比较:在历史语言学中调和计算和经典方法),由 Johann-Mattis List 领导。

项目详情


下载文件

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

源代码发行版

alteruphono-0.4.tar.gz (127.0 kB 查看散列值)

上传时间 源代码

构建发行版

alteruphono-0.4-py3-none-any.whl (252.4 kB 查看散列值)

上传时间 Python 3

支持者