#japanese #tokenizer #morphological #analyzer

no-std vaporetto_rules

基于规则的Vaporetto过滤器

10个版本

0.6.3 2023年4月1日
0.6.2 2023年3月7日
0.6.1 2022年10月27日
0.5.1 2022年6月20日
0.1.4 2021年11月1日

#1899 in 文本处理

Download history 385/week @ 2024-03-31 152/week @ 2024-04-07 474/week @ 2024-04-14 296/week @ 2024-04-21 112/week @ 2024-04-28 188/week @ 2024-05-05 214/week @ 2024-05-12 102/week @ 2024-05-19 98/week @ 2024-05-26 122/week @ 2024-06-02 250/week @ 2024-06-09 259/week @ 2024-06-16 176/week @ 2024-06-23 92/week @ 2024-06-30 142/week @ 2024-07-07 81/week @ 2024-07-14

493 每月下载量
用于vaporetto_tantivy

MIT/Apache

290KB
7K SLoC

vaporetto_rules

Vaporetto是一个快速轻量级的基于点预测的tokenizer。vaporetto_rules是Vaporetto的基于规则的过滤器。

示例

use std::fs::File;
use std::io::BufReader;
use std::rc::Rc;

use vaporetto::{CharacterType, Model, Predictor, Sentence};
use vaporetto_rules::{
    SentenceFilter, StringFilter,
    sentence_filters::{ConcatGraphemeClustersFilter, KyteaWsConstFilter},
    string_filters::KyteaFullwidthFilter,
};

let mut f = BufReader::new(File::open("model.bin").unwrap());
let model = Model::read(&mut f).unwrap();
let mut predictor = Predictor::new(model, false).unwrap();

let pre_filters: Vec<Box<dyn StringFilter<String>>> = vec![
    Box::new(KyteaFullwidthFilter),
];
let post_filters: Vec<Box<dyn SentenceFilter>> = vec![
    Box::new(ConcatGraphemeClustersFilter),
    Box::new(KyteaWsConstFilter::new(CharacterType::Digit)),
];

let input = "Vaporettoは仲良し家族👨‍👨‍👧‍👦を離れ離れにさせません。"
    .to_string();

let preproc_input = pre_filters.iter().fold(input, |s, filter| filter.filter(s));

let mut sentence = Sentence::from_raw(preproc_input).unwrap();
predictor.predict(&mut sentence);

post_filters.iter().for_each(|filter| filter.filter(&mut sentence));

let mut buf = String::new();
sentence.write_tokenized_text(&mut buf);
assert_eq!(
    "Vaporetto は 仲良 し 家族 👨‍👨‍👧‍👦 を 離れ離れ に さ せ ま せ ん 。",
    buf,
);

许可证

许可协议为以下之一

任选其一。

贡献

除非你明确表示,否则任何有意提交并包含在作品中的贡献,如Apache-2.0许可证中定义的,将按照上述方式双许可,不附加任何额外的条款或条件。

依赖关系

~3MB
~49K SLoC