1 个不稳定版本
| 0.1.0 | 2024 年 2 月 20 日 |
|---|
887 在 算法
33KB
277 行
name-engine
预览:生成英语地名 examples/england_evaluated.rs
name-engine 是一个基本的库,用于计算 Markov 链以基于发音生成名称。
这可以用于各种目的,但主要用于生成地名。
算法
此库从名称数据集计算 Markov 链。名称必须按照某些用户定义的规则分隔,例如音节。每个分隔的单元被视为 Markov 链的一个状态。
转移被定义为发音之间的连接。例如
-
ŋ->w在Ringwood /ˈrɪŋwʊd/[(Ring /ˈrɪŋ/)(wood /wʊd/)] -
k->ə在Beccles /ˈbɛkəlz/[(Becc /ˈbɛk/)(les /əlz/)] -
k->ə和m->s在Berkhamsted /ˈbɜːrkəmstɛd/[(Berk /ˈbɜːrk/)(ham /əm/)(sted /stɛd/)]
根据上述数据,模型可以通过跟踪转换 k -> ə,从 (Berk /ˈbɜːrk/) 和 (les /əlz/) 生成 Berkles。
转换的概率是根据数据集中连接的频率计算的。
特性
这个库可以
- 从分词的名字数据集中创建名字生成器。
- 使用马尔可夫链生成名字。
这个库不能
- 从文件中读取和解析数据。
- 自动根据特定规则(如音节)将原始名字分开。您必须自行准备数据集。
- 评估名字。如果您想生成更好的名字,您必须自行实现评估函数和过滤过程。
- 组合其他参数。如果您想这样做,
NameGenerator::generate_verbose是有用的。
这个库只做生成名字所必需的最小处理。要创建更实用的名字生成器,还需要进行一些如上所述的额外处理。
文档
运行 cargo doc --open 查看文档。
如果您想试试,请查看 examples/ 中的示例。对于第一步,examples/japanese.rs 是适合阅读的。
安装
[dependencies]
name-engine = "0.1.0"
示例
生成100个北海道的地名
$ cargo run --example hokkaido
中富 nakatomi
初威冠 shoikappu
上沢 kamizawa
生成100个英格兰的地名
$ cargo run --example england
Stoneon /ˈstəʊnən/
Thatchingworth /ˈθætʃɪŋwɜːθ/
Brentgomley /ˈbrɛntɡʌmli/
生成100个英格兰的地名(提取更好的名字)
$ cargo run --example england_evaluated
Oltham Abbey /ˈoʊlθəm ˈæbi/
Downbury /ˈdaʊnbəri/
Farhead /ˈfɑːrhɛd/
生成100个美国的地名(提取更好的名字)
$ cargo run --example us_evaluated
Winfield /ˈwɪnfiːld/
Perton /ˈpɛrtən/
Kinbridge Falls /ˈkɪnbrɪdʒ fɔːlz/
关于示例中的英文和美国地名数据
对于英文和美国地名数据,为了获得更好的结果,添加了一些符号。
- 空格被替换为
+并被处理为独立的音节。 - 对于带有大写字母的音节,在发音的开头添加一个星号
*,使其成为名字的第一个音节或+的下一个音节。 - 对于
+的上一个音节的发音,在发音的末尾添加一个星号*,使其成为+的上一个音节。
示例
Tunbridge Wells /ˈtʌnbrɪdʒ ˈwɛlz/
(Tun, /*ˈtʌn/) (bridge, /brɪdʒ*/) (+, /+/) (Wells, /*ˈwɛlz/)
(Tun /ˈtʌn/)->(Tun /*ˈtʌn/)[2](bridge /brɪdʒ/)->(bridge /brɪdʒ*/)[3](+ /+/)[1](Wells /ˈwɛlz/)->(Wells /*ˈwɛlz/)[2]
此外,一些后缀被视为独立的音节,例如 minster 和 bridge。
数据源
examples/assets/hokkaido.csv:北海道政府公开数据 CC-BY4.0(https://creativecommons.org/licenses/by/4.0/deed.ja) 基于原始数据修改。
来源: https://www.pref.hokkaido.lg.jp/link/shichoson/aiueo.html
许可证
本项目采用 Mozilla Public License v2.0 许可。详情请参阅 LICENSE 文件。
依赖项
~280–740KB
~17K SLoC