Skip to main content

Crate mecab_ko

Crate mecab_ko 

Source
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);

§성능 팁

  1. 토크나이저 재사용: Tokenizer는 내부에 Lattice를 재사용하므로 매번 새로 생성하지 마세요.
  2. 배치 처리: 많은 텍스트를 처리할 때는 mecab_ko_core::BatchTokenizer를 사용하세요.
  3. 캐싱: 반복되는 입력이 있으면 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();

§모듈 구조

  • tokenizer: 형태소 분석 메인 인터페이스
  • pos_tag: 품사 태그 정의 (세종 품사 체계)
  • hangul: 한글 자모 처리 유틸리티
  • dict: 사전 로딩 및 검색

§Feature Flags

  • builder: 사전 빌더 기능 포함

Modules§

dict
형태소 사전
hangul
한글 자모 처리
pos_tag
품사 태그 정의
sejong
세종 코퍼스 호환 (v0.4.0+)
tokenizer
형태소 분석기

Structs§

AnalyzerConfig
분석기 설정
BatchTokenizer
배치 토크나이저
CacheConfig
캐시 설정
CacheStats
캐시 통계
CachingTokenizer
캐싱 가능한 토크나이저 래퍼
Entry
사전 엔트리
ImprovedNbestSearcher
개선된 N-best Viterbi 탐색기
LargeFileProcessor
대용량 파일 스트리밍 프로세서
NbestPath
N-best 경로 하나를 표현
NbestResult
N-best 검색 결과
PosFilter
품사 필터
StreamingTokenizer
스트리밍 토크나이저
Token
토큰
TokenCache
토큰화 캐시
TokenStream
Iterator 기반 스트리밍 토크나이저
Tokenizer
토크나이저

Enums§

AnalysisMode
분석 모드
CharType
문자의 종류를 나타내는 열거형
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 타입 별칭