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