사전
Gukhanmun은 하나 이상의 HanjaDictionary 구현에서 한자 독음을 찾습니다.
gukhanmun 크레이트는 FST와 CDB 백엔드, 내장 《표준국어대사전》, 그리고
ko-kp 프리셋에서 쓰는 《우리말샘》 북한어 사전과 함께 배포됩니다.
내장 사전 사용
프리셋이 고른 내장 사전은 자동으로 포함됩니다. 모든 내장 사전을 끄고 사용자
정의 사전이나 fallback에만 의존하려면:
let converter = Builder::with_preset(Preset::KoKr)
.no_bundled_dictionaries()
.build()?;
개별 내장 사전만 끄려면 no_bundled_stdict()나 no_bundled_opendict()를
사용합니다. no_bundled_stdict()를 호출한 뒤 다시 명시적으로 켜려면:
builder.bundled_stdict();
북한어 표기를 기본값으로 쓰려면 ko-kp 프리셋을 사용합니다. 이 프리셋은
두음법칙을 끄고 《우리말샘》 북한어 사전을 내장 사전으로 포함합니다:
let converter = Builder::with_preset(Preset::KoKp).build()?;
assert_eq!(converter.convert_text_to_string("歷史와 來日")?, "력사와 래일");
ko-kp의 정서법 옵션은 유지하되 《우리말샘》 북한어 사전만 끄려면:
let converter = Builder::with_preset(Preset::KoKp)
.no_bundled_opendict()
.build()?;
파일에서 사전 불러오기
fst나 cdb 피처가 필요합니다.
use gukhanmun::FstDictionary; // 또는 CdbDictionary
let dict = FstDictionary::open("custom.gukfst")?;
let converter = Builder::with_preset(Preset::KoKr)
.push_dictionary(dict)
.build()?;
push_dictionary로 추가한 사전은 내장 사전보다 먼저 참조됩니다. 연쇄 전체에서
처음 일치한 것이 채택됩니다.
zero-copy 정적 사전
include_bytes!로 사전을 바이너리에 직접 내장하여 파일 입출력 없이 불러옵니다:
use gukhanmun::FstDictionary;
static MY_DICT: &[u8] = include_bytes!("../data/custom.gukfst");
let dict = FstDictionary::from_static_bytes(MY_DICT)?;
from_static_bytes는 데이터를 복사하지 않습니다; 정적 슬라이스에 기댄 zero-copy
뷰를 만듭니다.
소유된 바이트에서 불러오기
바이트가 런타임 출처(네트워크, 데이터베이스 등)에서 올 때는 Arc<[u8]>로
감쌉니다:
use std::sync::Arc;
use gukhanmun::CdbDictionary;
let bytes: Vec<u8> = std::fs::read("custom.gukcdb")?;
let dict = CdbDictionary::from_bytes(Arc::from(bytes.as_slice()))?;
여러 사전 연결
ChainDictionary는 여러 사전을 명시적 우선순위로 결합하게 해 줍니다. 연쇄에서
일치를 가진 첫 사전이 채택됩니다:
use gukhanmun::{ChainDictionary, FstDictionary, CdbDictionary, HanjaDictionary};
let domain_dict = FstDictionary::open("legal.gukfst")?;
let names_dict = CdbDictionary::open("names.gukcdb")?;
let chain = ChainDictionary::from_iter([
Box::new(domain_dict) as Box<dyn HanjaDictionary>,
Box::new(names_dict),
]);
let converter = Builder::with_preset(Preset::KoKr)
.no_bundled_stdict()
.push_boxed_dictionary(Box::new(chain))
.build()?;
대안으로, push_dictionary를 여러 번 호출합니다; 사전은 push된 순서대로, 내장
사전보다 먼저 탐색됩니다.
《우리말샘》 분류 결합
opendict 피처가 켜져 있으면 《우리말샘》의 일반어, 북한어, 방언, 옛말
분류를 Rust에서 직접 불러올 수 있습니다. ko-kp 프리셋은 북한어 분류를
자동으로 포함하지만, 방언과 옛말은 사용자가 명시적으로 선택해야 합니다:
use gukhanmun::{Builder, ChainDictionary, HanjaDictionary, Preset};
let chain = ChainDictionary::from_iter([
Box::new(gukhanmun::opendict::dialect()) as Box<dyn HanjaDictionary>,
Box::new(gukhanmun::opendict::archaic()),
]);
let converter = Builder::with_preset(Preset::KoKr)
.push_boxed_dictionary(Box::new(chain))
.build()?;
사용자 정의 사전 구축
위에서 불러온 .gukfst와 .gukcdb 파일은 컴파일된 산출물이며,
gukhanmun-mkdict 도구로 평문 텍스트 표에서 빌드됩니다. 사전 출처를 작성하고
컴파일하는 방법은 CLI 안내서의
〈사용자 정의 사전 구축〉을
참조하십시오.