rust-soundchange:在 Rust 中实现声音变化算法的工具

  • J4_758758
    了解作者
  • 13.7KB
    文件大小
  • zip
    文件格式
  • 0
    收藏次数
  • VIP专享
    资源类型
  • 0
    下载次数
  • 2022-06-11 11:28
    上传日期
Rust-soundchange 实现声音变化算法的工具。 这是严格按照 Mark Rosenfelder 的建模的,并对 Rust 的宏系统进行了必要的调整。 典型用法及与原SCA规则对比: #[macro_use] extern crate soundchange; #[macro_use] extern crate log; use soundchange::{CharOf, StrTo}; fn main() { // custom conditions let is_boundary = |c: Option<char>| c.is_none(); let is_vowel = |c: Option<char>| c.map_or(false, |c| "aeiou".contains_char(c)); let boundary = C
rust-soundchange-master.zip
内容介绍
# Rust-soundchange A tool for implementing sound change algorithms. This is strictly modeled after Mark Rosenfelder's [Sound Change Applier][sca], with a necessary tweak for Rust's macro system. [sca]: http://zompist.com/scahelp.html Typical usage and the comparison with the original SCA rules: ``` #[macro_use] extern crate soundchange; #[macro_use] extern crate log; use soundchange::{CharOf, StrTo}; fn main() { // custom conditions let is_boundary = |c: Option<char>| c.is_none(); let is_vowel = |c: Option<char>| c.map_or(false, |c| "aeiou".contains_char(c)); let boundary = CharOf(&is_boundary); let vowel = CharOf(&is_vowel); // custom transformers let make_reverse = |s: &str, out: &mut String| out.extend(s.chars().rev()); let reverse = StrTo(&make_reverse); let s = "fihs".to_string(); let s = subst_rules! { s => // V=aeiou "f" [boundary] => "gh"; // f/gh/_# "f" => "ph"; // f/ph/_ ["w"] vowel ["m" vowel "n"] => "o"; // V/o/w_mVn "sh" ["o"] => "ti"; // sh/ti/_o [vowel] "hs" => reverse; // sh/\\/V_ "" [boundary] => "ing"; // /ing/_# }; assert_eq!(s, "phishing"); } ``` Note: You can use `RUST_LOG=4` for tracking any change on the string and rules that trigger that change. Also, a large number of rules may trigger a recursion limit on rustc; you have to split them in that case. Any expression in the left side is considered a "condition" for searching, and can be either `char`, `&str` or a function from `Option<char>` to `bool`. The function argument is an `Option` since it can look at the string boundary. `[]` indicates a context, and is not considered when the string gets transformed. (The behavior of conditions can be also customized by implementing `IntoCond` trait and/or `Search` trait. `&str` and the function implements both.) Any expression in the right side is considered a "transformer", and can be either `char`, `&str` or a function from `char` to `char`. When multiple characters have been matched, a function will be invoked for each character. (The behavior of transformers can be also customized by implementing `Transform` trait.) The actual processing is driven through the `subst` function, which is for convenience wrapped into the `subst_rules!` macro. The syntax should be self-explanatory, except that it returns a `CowString`. ## Case Study: English Pronunciation `src/english` provides a reimplementation of Mark Rosenfelder's [pronunciation algorithm][spell] for English. [spell]: http://zompist.com/spell.html
评论
    相关推荐
    • 使用对齐算法比较二进制文件-Rust开发
      为此,它使用了rust-bio库中的生物信息学算法(通常用于DNA序列比对)。 biodiff使用对齐算法比较二进制文件。 这是什么这是用于二进制比较的工具。 该工具能够并排显示两个二进制文件,以便相似的位置在两侧都位于...
    • geo:Rust的地理空间基元和算法
      geo:Rust的地理空间基元和算法
    • freeverb-rs:Freeverb算法Rust实现
      Freeverb算法Rust实现。 关于自由词 Freeverb最初由“ Jezar at Dreampoint”用C ++编写,并于2000年6月发布到公共领域。现在,它已在多种软件的各种版本中广泛使用。 关于freeverb-rs Rust中Freeverb的这种实现...
    • spiril:用于遗传算法Rust
      Spiril是遗传算法的一种实现,该遗传算法用于通过突变和自然选择来获得任务的最佳变量(遗传)。 API使您可以指定一组初始单元,这些单元将充当所有后续单元的原始父级。 单位类型实现适应度函数和繁殖函数,以将新...
    • Rust:在Rust中实现的所有算法
      Rust:在Rust中实现的所有算法
    • redcentipede:Rust 中的遗传算法项目
      Rust 中的遗传算法项目 该项目的概念大量借鉴了。 红蜈蚣的一般博弈论 那里存在: 世界 部分代理 一些资源 时间单位 世界- 世界是一个具有 X、Y 坐标的二维网格。 存在的代理和资源都有一个 X 和一个 Y,它们指的是...
    • metaheuristics-rs:Rust中元算法的实现
      元启发式 Rust中元算法的实现。
    • isosurface:等值面提取的Rust算法
      Rust中实现的等值面提取算法。 包括经典的行进立方体和双重轮廓技术,以及主题上的更多现代变化。 为了教育的目的,每种提取算法的文档都链接到相关的学术论文。 范例程序 cargo run --example sampler将执行采样...
    • SIM800C_MQTT.rar
      使用SIM800C模块,使用MQTT协议,连接中国移动onenet平台,能实现数据的订阅、发布、存储等