wordcut-engine 1.2.2

Word segmentation/breaking library
Documentation
#[derive(Clone, PartialEq, Eq, Copy, Debug, Serialize, Deserialize)]
pub enum EdgeType {
    Init,
    Dict,
    Unk,
    Pat,
}

#[derive(Clone, Copy, Debug, PartialEq)]
pub struct Edge {
    pub w: usize,
    pub unk: usize,
    pub p: usize,
    pub etype: EdgeType,
}

impl Edge {
    pub fn is_unk(&self) -> bool {
        self.etype == EdgeType::Unk
    }

    pub fn better_than(&self, o: &Edge) -> bool {
        if self.etype == EdgeType::Pat && o.etype == EdgeType::Unk {
            return true;
        }

        if self.etype == EdgeType::Unk && o.etype == EdgeType::Pat {
            return false;
        }
        if self.unk < o.unk {
            return true;
        }

        if self.unk > o.unk {
            return false;
        }

        if self.w < o.w {
            return true;
        }

        if self.w > o.w {
            return false;
        }

        if o.is_unk() && !self.is_unk() {
            return true;
        }

        false
    }

    pub fn better(a: &Option<Edge>, b: &Option<Edge>) -> bool {
        match (a, b) {
            (None, _) => false,
            (_, None) => true,
            (Some(edge_a), Some(edge_b)) => edge_a.better_than(edge_b),
        }
    }
}