use crate::sejong::types::SejongToken;
const TO_NNG_WORDS: &[&str] = &["요즘", "진짜"];
const FOREIGN_NNP_TO_NNG: &[&str] = &[
"프레임워크",
"리팩토링",
"알고리즘",
"커버리지",
"아키텍처",
"머신러닝",
"컨테이너",
"인터페이스",
"데이터베이스",
"서버",
"클라이언트",
"프로토콜",
"레이어",
"모듈",
"컴포넌트",
];
pub(super) fn apply_pos_reclassification_corrections(tokens: &mut [SejongToken]) {
for token in tokens.iter_mut() {
if (token.pos == "MAG" || token.pos == "VV")
&& TO_NNG_WORDS.contains(&token.surface.as_str())
{
token.pos = "NNG".to_string();
}
}
let nnp_to_nng_orgs = ["외교부", "국방부", "통일부", "교육부", "행정부", "대통령실"];
for token in tokens.iter_mut() {
if token.pos == "NNP" && nnp_to_nng_orgs.contains(&token.surface.as_str()) {
token.pos = "NNG".to_string();
}
}
for token in tokens.iter_mut() {
if token.pos == "NNP" && FOREIGN_NNP_TO_NNG.contains(&token.surface.as_str()) {
token.pos = "NNG".to_string();
}
}
let slang_nnp_to_nng = ["킹"];
for token in tokens.iter_mut() {
if token.pos == "NNP" && slang_nnp_to_nng.contains(&token.surface.as_str()) {
token.pos = "NNG".to_string();
}
}
let onomatopoeia_to_ic = ["야옹"];
for token in tokens.iter_mut() {
if token.pos == "NNG" && onomatopoeia_to_ic.contains(&token.surface.as_str()) {
token.pos = "IC".to_string();
}
}
for token in tokens.iter_mut() {
if token.surface == "ㅓ요" && token.pos == "EF" {
token.surface = "어요".to_string();
}
}
let vv_to_va = ["졸리"];
for token in tokens.iter_mut() {
if token.pos == "VV" && vv_to_va.contains(&token.surface.as_str()) {
token.pos = "VA".to_string();
}
}
}