Skip to main content

novel_segment/
postag.rs

1//! Part-of-speech bit flags. Values match `@novel-segment/postag`.
2
3use std::fmt;
4
5/// POS tag bit flags (identical numeric values to the TypeScript `POSTAG` enum).
6#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
7pub struct POSTAG;
8
9impl POSTAG {
10    /// 錯字
11    pub const BAD: u32 = 0x8000_0000;
12    /// 形容詞
13    pub const D_A: u32 = 0x4000_0000;
14    /// 區別詞
15    pub const D_B: u32 = 0x2000_0000;
16    /// 連詞
17    pub const D_C: u32 = 0x1000_0000;
18    /// 副詞
19    pub const D_D: u32 = 0x0800_0000;
20    /// 嘆詞
21    pub const D_E: u32 = 0x0400_0000;
22    /// 方位詞
23    pub const D_F: u32 = 0x0200_0000;
24    /// 成語
25    pub const D_I: u32 = 0x0100_0000;
26    /// 習語
27    pub const D_L: u32 = 0x0080_0000;
28    /// 數詞
29    pub const A_M: u32 = 0x0040_0000;
30    /// 數量詞
31    pub const D_MQ: u32 = 0x0020_0000;
32    /// 名詞
33    pub const D_N: u32 = 0x0010_0000;
34    /// 擬聲詞
35    pub const D_O: u32 = 0x0008_0000;
36    /// 介詞
37    pub const D_P: u32 = 0x0004_0000;
38    /// 量詞
39    pub const A_Q: u32 = 0x0002_0000;
40    /// 代詞
41    pub const D_R: u32 = 0x0001_0000;
42    /// 處所詞
43    pub const D_S: u32 = 0x0000_8000;
44    /// 時間詞
45    pub const D_T: u32 = 0x0000_4000;
46    /// 助詞
47    pub const D_U: u32 = 0x0000_2000;
48    /// 動詞
49    pub const D_V: u32 = 0x0000_1000;
50    /// 標點符號
51    pub const D_W: u32 = 0x0000_0800;
52    /// 非語素字
53    pub const D_X: u32 = 0x0000_0400;
54    /// 語氣詞
55    pub const D_Y: u32 = 0x0000_0200;
56    /// 狀態詞
57    pub const D_Z: u32 = 0x0000_0100;
58    /// 人名
59    pub const A_NR: u32 = 0x0000_0080;
60    /// 地名
61    pub const A_NS: u32 = 0x0000_0040;
62    /// 機構團體
63    pub const A_NT: u32 = 0x0000_0020;
64    /// 外文字符
65    pub const A_NX: u32 = 0x0000_0010;
66    /// 其他專名
67    pub const A_NZ: u32 = 0x0000_0008;
68    /// 前接成分
69    pub const D_ZH: u32 = 0x0000_0004;
70    /// 後接成分
71    pub const D_K: u32 = 0x0000_0002;
72    /// 網址、郵箱
73    pub const URL: u32 = 0x0000_0001;
74    /// 未知
75    pub const UNK: u32 = 0x0000_0000;
76
77    /// True if `p` has any of the listed flags.
78    pub fn any(p: u32, flags: &[u32]) -> bool {
79        flags.iter().any(|f| p & f != 0)
80    }
81}
82
83impl fmt::Display for POSTAG {
84    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
85        f.write_str("POSTAG")
86    }
87}