igo/dictionary/
viterbinode.rs

1use std::rc::Rc;
2
3
4/// Viterbiアルゴリズムで使用されるノード
5#[derive(Debug)]
6pub struct ViterbiNode {
7    /// 始点からノードまでの総コスト
8    pub cost: i32,
9    /// コスト最小の前方のノードへのリンク
10    pub prev: Option<Rc<ViterbiNode>>,
11
12    /// 単語ID
13    pub word_id: i32,
14    /// 左文脈ID
15    pub left_id: i16,
16    /// 右文脈ID
17    pub right_id: i16,
18    /// 入力テキスト内での形態素の開始位置
19    pub start: usize,
20    /// 形態素の表層形の長さ(文字数)
21    pub length: i16,
22
23    /// 形態素の文字種(文字カテゴリ)が空白文字かどうか
24    pub is_space: bool
25}
26
27impl ViterbiNode {
28    pub fn make_boseos() -> ViterbiNode {
29        ViterbiNode {
30            word_id: 0,
31            start: 0,
32            length: 0,
33            cost: 0,
34            left_id: 0,
35            right_id: 0,
36            is_space: false,
37            prev: None
38        }
39    }
40}