1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
#[cfg(feature = "serde")]
use serde::{Deserialize, Serialize};
use crate::{phoneme::Phoneme, prosody::ProsodicPhoneme};
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
pub struct WordPhonemePair {
pub word: String,
pub phonemes: Vec<Phoneme>,
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
pub struct WordPhonemeMap {
pub word: String,
pub phonemes: Vec<Phoneme>,
/// 元となった形態素について、MeCab が未知語 (`MECAB_UNK_NODE`) と判定したかどうか。
///
/// NJDの処理によって複数の形態素が結合された場合は、その中に1つでも未知語が含まれていれば `true` となる。
pub is_unknown: bool,
/// `pyopenjtalk` のパイプラインで無視される対象 ("記号,空白") として空白 (`sp`) に置き換えられたか、
/// または NJD/JPCommon の処理結果として音素が1つも割り当てられなかったかどうか。
///
/// (e.g., 先頭の `ー` など、他の形態素に長音として吸収されず破棄されたケース)
pub is_ignored: bool,
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
pub struct WordPhonemeDetail {
/// 表層形 (surface)
pub word: String,
pub phonemes: Vec<Phoneme>,
/// Mecab が出力した features。
/// 既知語は 12 列、未知語は 8 列 (read, pron, acc, chain_rule がない)
pub features: Vec<String>,
/// 品詞
pub pos: String,
/// 品詞細分類1
pub pos_group1: String,
/// 品詞細分類2
pub pos_group2: String,
/// 品詞細分類3
pub pos_group3: String,
/// 活用型
pub ctype: String,
/// 活用形
pub cform: String,
/// 原形
pub orig: String,
/// 読み
pub read: String,
/// 発音形式
pub pron: String,
/// アクセント核位置 (0: 平板型, 1-n: n番目のモーラにアクセント核)
pub accent_nucleus: i32,
/// モーラ数
pub mora_count: i32,
/// アクセント結合規則 (C1-C5/F1-F5/P1-P2 等)
pub chain_rule: String,
/// アクセント句連結フラグ
pub chain_flag: i32,
/// 元となった形態素について、MeCab が未知語 (`MECAB_UNK_NODE`) と判定したかどうか。
///
/// NJDの処理によって複数の形態素が結合された場合は、その中に1つでも未知語が含まれていれば `true` となる。
pub is_unknown: bool,
/// `pyopenjtalk` のパイプラインで無視される対象 ("記号,空白") として空白 (`sp`) に置き換えられたか、
/// または NJD/JPCommon の処理結果として音素が1つも割り当てられなかったかどうか。
///
/// (e.g., 先頭の `ー` など、他の形態素に長音として吸収されず破棄されたケース)
pub is_ignored: bool,
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
pub struct WordPhonemeProsody {
/// 表層形 (surface)
pub word: String,
pub phonemes: Vec<ProsodicPhoneme>,
/// 品詞
pub pos: String,
/// 品詞細分類1
pub pos_group1: String,
/// 品詞細分類2
pub pos_group2: String,
/// 品詞細分類3
pub pos_group3: String,
/// 活用型
pub ctype: String,
/// 活用形
pub cform: String,
/// 原形
pub orig: String,
/// 読み
pub read: String,
/// 発音形式
pub pron: String,
/// アクセント核位置 (0: 平板型, 1-n: n番目のモーラにアクセント核)
pub accent_nucleus: i32,
/// モーラ数
pub mora_count: i32,
/// アクセント結合規則 (C1-C5/F1-F5/P1-P2 等)
pub chain_rule: String,
/// アクセント句連結フラグ
pub chain_flag: i32,
/// 元となった形態素について、MeCab が未知語 (`MECAB_UNK_NODE`) と判定したかどうか。
///
/// NJDの処理によって複数の形態素が結合された場合は、その中に1つでも未知語が含まれていれば `true` となる。
pub is_unknown: bool,
/// `pyopenjtalk` のパイプラインで無視される対象 ("記号,空白") として空白 (`sp`) に置き換えられたか、
/// または NJD/JPCommon の処理結果として音素が1つも割り当てられなかったかどうか。
///
/// (e.g., 先頭の `ー` など、他の形態素に長音として吸収されず破棄されたケース)
pub is_ignored: bool,
}