jpreprocess_core/pos/
joshi.rs

1use std::{fmt::Display, str::FromStr};
2
3use serde::{Deserialize, Serialize};
4
5use super::{POSKind, POSParseError};
6
7#[derive(Clone, Copy, PartialEq, Debug, Serialize, Deserialize)]
8/// 助詞
9pub enum Joshi {
10    /// 格助詞
11    KakuJoshi(KakuJoshi),
12    /// 係助詞
13    KakariJoshi,
14    /// 終助詞
15    ShuJoshi,
16    /// 接続助詞
17    SetsuzokuJoshi,
18    /// 特殊
19    Special,
20    /// 副詞化
21    Fukushika,
22    /// 副助詞
23    FukuJoshi,
24    /// 副助詞/並立助詞/終助詞
25    FukuHeiritsuShuJoshi,
26    /// 並立助詞
27    HeiritsuJoshi,
28    /// 連体化
29    Rentaika,
30}
31
32impl Joshi {
33    pub fn from_strs(g1: &str, g2: &str) -> Result<Joshi, POSParseError> {
34        match g1 {
35            "格助詞" => KakuJoshi::from_str(g2).map(Self::KakuJoshi),
36            "係助詞" => Ok(Self::KakariJoshi),
37            "終助詞" => Ok(Self::ShuJoshi),
38            "接続助詞" => Ok(Self::SetsuzokuJoshi),
39            "特殊" => Ok(Self::Special),
40            "副詞化" => Ok(Self::Fukushika),
41            "副助詞" => Ok(Self::FukuJoshi),
42            "副助詞/並立助詞/終助詞" => Ok(Self::FukuHeiritsuShuJoshi),
43            "並立助詞" => Ok(Self::HeiritsuJoshi),
44            "連体化" => Ok(Self::Rentaika),
45
46            _ => Err(POSParseError::new(1, g1.to_string(), POSKind::Joshi)),
47        }
48    }
49}
50
51#[derive(Clone, Copy, PartialEq, Debug, Serialize, Deserialize)]
52/// 格助詞
53pub enum KakuJoshi {
54    /// 一般
55    General,
56    /// 引用
57    Quote,
58    /// 連語
59    Rengo,
60}
61
62impl FromStr for KakuJoshi {
63    type Err = POSParseError;
64    fn from_str(s: &str) -> Result<Self, Self::Err> {
65        match s {
66            "一般" => Ok(Self::General),
67            "引用" => Ok(Self::Quote),
68            "連語" => Ok(Self::Rengo),
69
70            _ => Err(POSParseError::new(2, s.to_string(), POSKind::KakuJoshi)),
71        }
72    }
73}
74
75impl Display for Joshi {
76    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
77        f.write_str(match &self {
78            Self::KakuJoshi(KakuJoshi::General) => "格助詞,一般,*",
79            Self::KakuJoshi(KakuJoshi::Quote) => "格助詞,引用,*",
80            Self::KakuJoshi(KakuJoshi::Rengo) => "格助詞,連語,*",
81            Self::KakariJoshi => "係助詞,*,*",
82            Self::ShuJoshi => "終助詞,*,*",
83            Self::SetsuzokuJoshi => "接続助詞,*,*",
84            Self::Special => "特殊,*,*",
85            Self::Fukushika => "副詞化,*,*",
86            Self::FukuJoshi => "副助詞,*,*",
87            Self::FukuHeiritsuShuJoshi => "副助詞/並立助詞/終助詞,*,*",
88            Self::HeiritsuJoshi => "並立助詞,*,*",
89            Self::Rentaika => "連体化,*,*",
90        })
91    }
92}