Skip to main content

mecab_ko/
lib.rs

1//! # mecab-ko
2//!
3//! 한국어 형태소 분석기 - MeCab-Ko의 순수 Rust 구현
4//!
5//! ## 소개
6//!
7//! `mecab-ko`는 한국어 형태소 분석을 위한 라이브러리입니다.
8//! 은전한닢(mecab-ko)의 순수 Rust 재구현으로, 빠르고 안전한 형태소 분석을 제공합니다.
9//!
10//! ## 주요 특징
11//!
12//! - **순수 Rust**: unsafe 코드 없이 메모리 안전성 보장
13//! - **한국어 최적화**: 띄어쓰기 패널티, 한글 자모 처리
14//! - **고성능**: Zero-copy 사전, 효율적인 Viterbi 구현
15//! - **유연성**: 사용자 사전, 필터 시스템 지원
16//!
17//! ## 빠른 시작
18//!
19//! ```rust,no_run
20//! use mecab_ko::Tokenizer;
21//!
22//! let mut tokenizer = Tokenizer::new().unwrap();
23//!
24//! // 기본 형태소 분석
25//! let tokens = tokenizer.tokenize("아버지가방에들어가신다");
26//! for token in tokens {
27//!     println!("{}\t{}", token.surface, token.pos);
28//! }
29//!
30//! // 분리만 (wakati)
31//! let words = tokenizer.wakati("안녕하세요");
32//! println!("{:?}", words);  // ["안녕", "하", "세요"]
33//!
34//! // 명사만 추출
35//! let nouns = tokenizer.nouns("오늘 날씨가 좋습니다");
36//! println!("{:?}", nouns);  // ["오늘", "날씨"]
37//! ```
38//!
39//! ## 모듈 구조
40//!
41//! - [`tokenizer`]: 형태소 분석 메인 인터페이스
42//! - [`pos_tag`]: 품사 태그 정의 (세종 품사 체계)
43//! - [`hangul`]: 한글 자모 처리 유틸리티
44//! - [`dict`]: 사전 로딩 및 검색
45//!
46//! ## Feature Flags
47//!
48//! - `builder`: 사전 빌더 기능 포함
49
50#![warn(missing_docs)]
51#![deny(unsafe_code)]
52
53// Re-export core types
54pub use mecab_ko_core::{
55    pos_tag::PosTag,
56    tokenizer::{Token, Tokenizer},
57    Error, Result,
58};
59
60// Re-export hangul utilities
61pub use mecab_ko_hangul::{
62    classify_char, compose, compose_str, decompose, decompose_str, has_jongseong, is_hangul,
63    is_hangul_syllable, is_jamo, CharType,
64};
65
66// Re-export dictionary types
67pub use mecab_ko_dict::{Dictionary, Entry};
68
69/// 한글 자모 처리
70///
71/// 한글 음절의 자모 분리/결합, 종성 판별 등을 제공합니다.
72pub mod hangul {
73    pub use mecab_ko_hangul::*;
74}
75
76/// 품사 태그 정의
77///
78/// 세종 품사 태그 체계 + mecab-ko-dic 확장 태그
79pub mod pos_tag {
80    pub use mecab_ko_core::pos_tag::*;
81}
82
83/// 형태소 분석기
84///
85/// 메인 형태소 분석 인터페이스
86pub mod tokenizer {
87    pub use mecab_ko_core::tokenizer::*;
88}
89
90/// 형태소 사전
91///
92/// 사전 로딩, 검색, 연접 비용 조회
93pub mod dict {
94    pub use mecab_ko_dict::*;
95}
96
97/// 사전 빌더 (builder feature 활성화 시)
98#[cfg(feature = "builder")]
99pub mod builder {
100    //! 사전 빌더
101    //!
102    //! CSV에서 바이너리 사전 생성
103
104    pub use mecab_ko_dict_builder::*;
105}
106
107/// 버전 정보
108pub const VERSION: &str = env!("CARGO_PKG_VERSION");
109
110#[cfg(test)]
111#[allow(clippy::similar_names, clippy::unwrap_used, clippy::const_is_empty)]
112mod tests {
113    use super::*;
114
115    #[test]
116    fn test_hangul_decompose() {
117        let (cho, jung, jong) = decompose('한').unwrap();
118        assert_eq!(cho, 'ㅎ');
119        assert_eq!(jung, 'ㅏ');
120        assert_eq!(jong, Some('ㄴ'));
121    }
122
123    #[test]
124    fn test_version() {
125        assert!(!VERSION.is_empty());
126    }
127}