2 个不稳定版本

0.1.0 2024 年 5 月 30 日
0.0.0 2023 年 9 月 1 日

124文本处理

Download history 122/week @ 2024-05-24 38/week @ 2024-05-31 5/week @ 2024-06-07 2/week @ 2024-06-28 5/week @ 2024-07-05

93 每月下载量

MIT 许可证

1MB
26K SLoC

vidyut-prakriya

潘衍词生成器

vidyut-prakriya 根据潘衍语法的规则生成梵文单词及其 prakriyā(词源),目前实现了大约 2,000 个规则。我们的长期目标是提供一个完整的《阿斯塔迪亚伊》实现。

这个 crate 是作为 Ambuda 项目的组成部分进行积极开发的。如果您喜欢我们的工作并希望为它做出贡献,请参阅下面的 贡献 部分。我们还鼓励您 加入我们的 Discord 服务器,在那里您可以遇到其他梵文程序员和爱好者。

在线演示在此 这里

概述

vidyut-prakriya 有三个显著特点

  1. 准确性。我们尽可能遵循潘衍语法的规则。我们返回的每个单词都可以选择性地包含一个 prakriyā,该 prakriyā 列出了使用的每个规则及其结果。

  2. 速度。在我的笔记本电脑上(2.4GHz 8核 CPU,64 GB DDR4 RAM),此 crate 在单个线程上每秒生成近 50,000 个单词。在其他条件相同的情况下,快速程序更容易运行和测试,这意味着我们可以以更高的标准生产更长的单词列表。

  3. 可移植性。此 crate 编译成快速本地代码,并且可以绑定到大多数其他编程语言,只需一点努力。特别是,此 crate 可以编译成 WebAssembly,这意味着它可以在现代网页浏览器中运行。

vidyut-prakriya 目前对基本动词有很强的支持。有关未来计划,请参阅我们的 路线图

用法

要生成所有基本 tinantas 在 kartari prayoga 中,请运行

$ make create_tinantas > output.csv

第一次运行 make create_tinantas 速度会很慢,因为您的机器首先需要编译 vidyut-prakriya。然而,在完成这个初始编译步骤后,后续的运行将会快得多,并且 make create_tinantas 很可能在几秒钟内完成编译和执行。

要程序化生成 prakriyas,您可以使用下面的启动代码

use vidyut_prakriya::Vyakarana;
use vidyut_prakriya::args::*;

let v = Vyakarana::new();

let dhatu = Dhatu::mula("BU", Gana::Bhvadi);
let args = Tinanta::builder()
    .dhatu(dhatu)
    .lakara(Lakara::Lat)
    .prayoga(Prayoga::Kartari)
    .purusha(Purusha::Prathama)
    .vacana(Vacana::Eka)
    .build().unwrap();

let prakriyas = v.derive_tinantas(&args);

for p in prakriyas {
    println!("{}", p.text());
    println!("---------------------------");
    for step in p.history() {
        let terms: Vec<_> = step.result().iter().map(|x| x.text()).filter(|x| !x.is_empty()).collect();
        let result = terms.join(" + ");
        println!("{:<10} | {}", step.rule().code(), result);
    }
    println!("---------------------------");
    println!("\n");
}

上述代码的输出

Bavati
---------------------------
1.3.1      | BU
3.2.123    | BU + la~w
1.3.2      | BU + la~w
1.3.3      | BU + la~w
1.3.9      | BU + l
1.3.78     | BU + l
3.4.78     | BU + tip
1.3.3      | BU + tip
1.3.9      | BU + ti
3.4.113    | BU + ti
3.1.68     | BU + Sap + ti
1.3.3      | BU + Sap + ti
1.3.8      | BU + Sap + ti
1.3.9      | BU + a + ti
3.4.113    | BU + a + ti
7.3.84     | Bo + a + ti
1.4.14     | Bo + a + ti
6.1.78     | Bav + a + ti
8.4.68     | Bav + a + ti
---------------------------

左列显示了在推导过程中应用的每个规则的简单字符串标签,您可以在 Rule 类型的注释中找到这些标签可以取的详细值的详细信息。我们建议使用 ashtadhyayi.com 来了解更多关于这些规则的信息。

右列显示了正在进行的 prakriya。我们使用的是其他 Ashtadhyayi 网站上常见的输出约定。此文本的编码格式为 SLP1,这是我们在整个crate中使用的编码格式。

有关更多详细信息,请参阅以下 Vyakarana 结构中的方法

  • derive_tinantas(用于动词)
  • derive_subantas(用于名词)
  • derive_krdantas(用于动词后缀)
  • derive_taddhitantas(用于名词后缀)

贡献

vidyut-prakriya 是一个雄心勃勃的项目,您的贡献可以帮助它成长。

报告错误

最简单的方法是如果您发现错误,请 在 GitHub 上提交问题。请告诉我们您期望看到哪种形式。我们也会非常感谢来自语法文献的相关引用,以便我们更好地理解和解决该问题。

修改代码

首先,尝试在您的机器上运行我们现有的代码。我们建议您首先运行我们的集成测试

$ make create_test_files
$ make test_all

接下来,尝试使用我们的 prakriya 调试器,它可以显示给定单词的确切推导过程

$ make debugger

一旦您确认了您的设置工作正常,我们建议您阅读有关 Term(在 term 模块中)和 Prakriya(在 prakriya 模块中)的文档。代码的几乎每个部分都涉及到这两个结构。

为了熟悉我们的规则,我们建议您浏览一下 ashtadhyayi 模块,它定义了我们的高级API,并包装了我们在系统中使用的所有规则。我们鼓励您阅读我们详尽的注释并探索 ashtadhyayi 中使用的较小模块。

现在您可以开始修改代码了。在您进行更改后,运行 make test_all 来验证代码的影响。

如果您对您的更改感到满意,您将需要更新我们的集成测试文件。这个过程有三个步骤。首先,运行以下步骤并确认您的测试失败

$ make create_test_files
$ make test_all

make test_all 应该在哈希比较错误上失败。复制新的哈希代码,将 test_all 中的现有哈希代码替换为复制的值。然后再次运行 make test_all 并确认所有测试都通过。

数据

本软件包包含来自ashtadhyayi.com的Dhatupatha,ashtadhyayi.com的作者已慷慨地同意在MIT许可下与我们分享此文件。

有关此Dhatupatha的谱系详细信息,请参阅我们的单独数据README

设计

详细信息请参阅ARCHITECTURE.md

依赖项

~7.5MB
~119K SLoC