/ichiran-rs

Rust bindings for ichiran-cli

Primary LanguageRustMozilla Public License 2.0MPL-2.0

ichiran-rs

Crates.io docs.rs Crates.io GitHub

Rust bindings for ichiran-cli.

Ichiran's API is not stable, so this crate may not work with some future version of ichiran-cli.

Setup

Instructions for building ichiran-cli can be found at https://readevalprint.tumblr.com/post/639359547843215360/ichiranhome-2021-the-ultimate-guide

Example

use ichiran::IchiranCli;
use std::{error::Error, path::PathBuf};

fn main() -> Result<(), Box<dyn Error>> {
    let cli = IchiranCli::new(PathBuf::from("./path-to-cli"));

    let segmentation = cli.segment("いい天気ですね。")?;
    println!("{segmentation:#?}");
    /* outputs
    [
        Words(
            [
                WordSegment {
                    words: [
                        Word {
                            romanized: "iitenki",
                            alternatives: [
                                WordInfo(
                                    WordInfo {
                                        reading: "いい天気 【いいてんき】",
                                        text: "いい天気",
                                        kana: "いいてんき",
                                        score: 315,
                                        counter: None,
                                        seq: Some(
                                            1914340,
                                        ),
                                        gloss: [
                                            Gloss {
                                                pos: "[n,exp]",
                                                gloss: "fine weather; fair weather",
                                                info: None,
                                            },
                                        ],
                                        suffix: None,
                                        conj: [],
                                    },
                                ),
                            ],
                        },
                        Word {
                            romanized: "desu",
                            alternatives: [
                                WordInfo(
                                    WordInfo {
                                        reading: "です",
                                        text: "です",
                                        kana: "です",
                                        score: 64,
                                        counter: None,
                                        seq: Some(
                                            1628500,
                                        ),
                                        gloss: [
                                            Gloss {
                                                pos: "[cop]",
                                                gloss: "be; is",
                                                info: None,
                                            },
                                        ],
                                        suffix: None,
                                        conj: [
                                            Conj {
                                                prop: [
                                                    ConjProp {
                                                        pos: "cop",
                                                        prop_type: None,
                                                        fml: true,
                                                        neg: false,
                                                    },
                                                ],
                                                via: [],
                                                reading: Some(
                                                    "だ",
                                                ),
                                                gloss: [
                                                    Gloss {
                                                        pos: "[cop,cop-da]",
                                                        gloss: "be; is",
                                                        info: Some(
                                                            "plain copula",
                                                        ),
                                                    },
                                                ],
                                                readok: true,
                                            },
                                        ],
                                    },
                                ),
                            ],
                        },
                        Word {
                            romanized: "ne",
                            alternatives: [
                                WordInfo(
                                    WordInfo {
                                        reading: "ね",
                                        text: "ね",
                                        kana: "ね",
                                        score: 16,
                                        counter: None,
                                        seq: Some(
                                            2029080,
                                        ),
                                        gloss: [
                                            Gloss {
                                                pos: "[prt]",
                                                gloss: "right?; isn't it?; doesn't it?; don't you?; don't you think?",
                                                info: Some(
                                                    "at sentence end; used as a request for confirmation or agreement",
                                                ),
                                            },
                                            Gloss {
                                                pos: "[int]",
                                                gloss: "hey; say; listen; look; come on",
                                                info: None,
                                            },
                                            Gloss {
                                                pos: "[prt]",
                                                gloss: "you know; you see; I must say; I should think",
                                                info: Some(
                                                    "at sentence end; used to express one's thoughts or feelings",
                                                ),
                                            },
                                            Gloss {
                                                pos: "[prt]",
                                                gloss: "will you?; please",
                                                info: Some(
                                                    "at sentence end; used to make an informal request",
                                                ),
                                            },
                                            Gloss {
                                                pos: "[prt]",
                                                gloss: "so, ...; well, ...; you see, ...; you understand?",
                                                info: Some(
                                                    "at the end of a non-final clause; used to draw the listener's attention to something",
                                                ),
                                            },
                                            Gloss {
                                                pos: "[prt]",
                                                gloss: "I'm not sure if ...; I have my doubts about whether ...",
                                                info: Some(
                                                    "at sentence end after the question marker か",
                                                ),
                                            },
                                        ],
                                        suffix: None,
                                        conj: [],
                                    },
                                ),
                            ],
                        },
                    ],
                    unknown: 405,
                },
            ],
        ),
        Other(
            ". ",
        ),
    ]
    */

    Ok(())
}