jpreprocess_core/pos/
joshi.rs1use std::{fmt::Display, str::FromStr};
2
3use serde::{Deserialize, Serialize};
4
5use super::{POSKind, POSParseError};
6
7#[derive(Clone, Copy, PartialEq, Debug, Serialize, Deserialize)]
8pub enum Joshi {
10 KakuJoshi(KakuJoshi),
12 KakariJoshi,
14 ShuJoshi,
16 SetsuzokuJoshi,
18 Special,
20 Fukushika,
22 FukuJoshi,
24 FukuHeiritsuShuJoshi,
26 HeiritsuJoshi,
28 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)]
52pub enum KakuJoshi {
54 General,
56 Quote,
58 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}