处理语音变化的库
项目描述
alteruphono
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
,但 left
和 right
已在 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 可能表示与历史演变不同的内容,如对应关系,但它们分别被命名为 ante
和 post
,并且规则可以是真实的,即 "当在 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 ə b
和 k ə 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 的散列值
算法 | 散列摘要 | |
---|---|---|
SHA256 | 67d44426ca5abc18fe14cbc97ea96ce36eb69f7c89c4890b1217052ea8799b27 |
|
MD5 | 27a9d8d77d19c9b762148784dd565a02 |
|
BLAKE2b-256 | 575d2f272e8fa98c990df5a5bd854754788fce3cf196ab3ea7286ba0940423cc |
alteruphono-0.4-py3-none-any.whl 的散列值
算法 | 散列摘要 | |
---|---|---|
SHA256 | 216dd1e11318ea1b23bf59d3b0a0c47e2eca52ceb77331203226ec3d7356ab60 |
|
MD5 | cf5c8f8475c351c1dbae48ff9e8da132 |
|
BLAKE2b-256 | bd05e6ab0c9348820f63794aba441dd7fb513d3c93d66810f269aa89a1da01f0 |