Expand description
§mecab-ko
한국어 형태소 분석기 - MeCab-Ko의 순수 Rust 구현
§소개
mecab-ko는 한국어 형태소 분석을 위한 라이브러리입니다.
은전한닢(mecab-ko)의 순수 Rust 재구현으로, 빠르고 안전한 형태소 분석을 제공합니다.
§주요 특징
- 순수 Rust: unsafe 코드 없이 메모리 안전성 보장
- 한국어 최적화: 띄어쓰기 패널티, 한글 자모 처리
- 고성능: Zero-copy 사전, 효율적인 Viterbi 구현
- 유연성: 사용자 사전, 필터 시스템 지원
§빠른 시작
use mecab_ko::Tokenizer;
let mut tokenizer = Tokenizer::new().unwrap();
// 기본 형태소 분석
let tokens = tokenizer.tokenize("아버지가방에들어가신다");
for token in tokens {
println!("{}\t{}", token.surface, token.pos);
}
// 분리만 (wakati)
let words = tokenizer.wakati("안녕하세요");
println!("{:?}", words); // ["안녕", "하", "세요"]
// 명사만 추출
let nouns = tokenizer.nouns("오늘 날씨가 좋습니다");
println!("{:?}", nouns); // ["오늘", "날씨"]§사용자 사전 추가
use mecab_ko::Tokenizer;
use mecab_ko::dict::UserDictionary;
let mut user_dict = UserDictionary::new();
user_dict.add_entry("챗GPT", "NNP", Some(-2000), None);
user_dict.add_entry("딥러닝", "NNG", Some(-1500), None);
let tokenizer = Tokenizer::new().unwrap()
.with_user_dict(user_dict);§성능 팁
- 토크나이저 재사용:
Tokenizer는 내부에 Lattice를 재사용하므로 매번 새로 생성하지 마세요. - 배치 처리: 많은 텍스트를 처리할 때는
mecab_ko_core::BatchTokenizer를 사용하세요. - 캐싱: 반복되는 입력이 있으면
mecab_ko_core::CachingTokenizer를 활용하세요.
§v0.4.0 새 기능
§세종 코퍼스 호환 출력
복합 형태소를 세종 코퍼스 표준 형식으로 분리합니다.
use mecab_ko::Tokenizer;
use mecab_ko::sejong::SejongConverter;
let mut tokenizer = Tokenizer::new().unwrap();
let tokens = tokenizer.tokenize("나는 학교에 갔다");
// 세종 형식 변환
let converter = SejongConverter::new();
let sejong_tokens = converter.convert_tokens(&tokens);
for token in sejong_tokens {
println!("{}/{}", token.surface, token.pos);
}
// 출력: 나/NP 는/JX 학교/NNG 에/JKB 갔다오/VV ㄴ/ETM§분해 정보 추출
mecab-ko-dic의 분해 컬럼(12번째)을 활용합니다.
use mecab_ko::sejong::SejongConverter;
// 분해 정보 파싱
let decomp = SejongConverter::parse_decomposition("가깝/VA/*+아/EC/*");
// 결과: [("가깝", "VA"), ("아", "EC")]§고급 기능 (v0.3.0+)
§N-best 경로 탐색
use mecab_ko::{Tokenizer, ImprovedNbestSearcher};
let tokenizer = Tokenizer::new().unwrap();
let nbest = ImprovedNbestSearcher::new(5); // 상위 5개 경로§분석 모드
use mecab_ko::{AnalysisMode, PosFilter};
// 명사만 추출
let filter = PosFilter::new()
.include_prefix("NNG")
.include_prefix("NNP");§토큰화 캐싱
use mecab_ko::{Tokenizer, CachingTokenizer, CacheConfig};
let tokenizer = Tokenizer::new().unwrap();
let cached = CachingTokenizer::new(tokenizer, CacheConfig::default());§배치/스트리밍 처리
use mecab_ko::BatchTokenizer;
// 병렬 배치 처리 (기본 스레드 수)
let batch = BatchTokenizer::new().unwrap();§모듈 구조
§Feature Flags
builder: 사전 빌더 기능 포함
Modules§
Structs§
- Analyzer
Config - 분석기 설정
- Batch
Tokenizer - 배치 토크나이저
- Cache
Config - 캐시 설정
- Cache
Stats - 캐시 통계
- Caching
Tokenizer - 캐싱 가능한 토크나이저 래퍼
- Entry
- 사전 엔트리
- Improved
Nbest Searcher - 개선된 N-best Viterbi 탐색기
- Large
File Processor - 대용량 파일 스트리밍 프로세서
- Nbest
Path - N-best 경로 하나를 표현
- Nbest
Result - N-best 검색 결과
- PosFilter
- 품사 필터
- Streaming
Tokenizer - 스트리밍 토크나이저
- Token
- 토큰
- Token
Cache - 토큰화 캐시
- Token
Stream - Iterator 기반 스트리밍 토크나이저
- Tokenizer
- 토크나이저
Enums§
- Analysis
Mode - 분석 모드
- Char
Type - 문자의 종류를 나타내는 열거형
- Error
- 핵심 엔진 에러 타입
- PosTag
- 품사 태그 (Part-of-Speech Tag)
Constants§
- VERSION
- 버전 정보
Traits§
- Dictionary
- 사전 인터페이스
Functions§
- classify_
char - 문자의 종류를 판별합니다.
- compose
- 초성, 중성, 종성을 결합하여 한글 음절을 만듭니다.
- compose_
str - 자모 문자열을 한글 음절로 결합합니다.
- decompose
- 한글 음절을 초성, 중성, 종성으로 분해합니다.
- decompose_
str - 문자열의 모든 한글 음절을 자모로 분해합니다.
- has_
jongseong - 주어진 한글 음절에 종성이 있는지 확인합니다.
- is_
hangul - 주어진 문자가 한글(음절 또는 자모)인지 확인합니다.
- is_
hangul_ syllable - 주어진 문자가 한글 음절인지 확인합니다.
- is_jamo
- 주어진 문자가 한글 자모인지 확인합니다.
Type Aliases§
- Result
- Result 타입 별칭