//------------------------------------------------------- // 語のchainを先頭から舐め、助詞(Postpositional Particle)を分解する。 static private WordTable ScanPPKr(WordChain wChain, WordTable wTable) { bool inputIsHangul = KJ_dict.inputIsHangul; // 語を舐め、助詞を分解する。 if (wTable.charCategory != CharCategory.Hangul && wTable.charCategory != CharCategory.LetterMix) { // ハングルでないなら、または英字+ハングルでないなら何もしない。 return(wTable); } // 完全一致の助詞なら情報をセットし、終了 string pp_trans = CheckHangulPP_Full(wTable); if (pp_trans != "") { wTable.transWord = pp_trans; wTable.posCategory = PosCategory.PP; if (wTable.word.Length > 2) { wTable.Cost = 0; } else if (wTable.word.Length == 2) { wTable.Cost = 3; } else { wTable.Cost = 5; } return(wTable); } // wordTableが辞書に完全一致で存在するか調べる。 bool isExist = KJ_dict.CheckFull(wTable.word); if (isExist) { // 完全一致した語は判定せず、なにもしない。 return(wTable); } // 助詞の分解を試みる WordChain resultChain = DivideHangulPP(wTable); if (resultChain == null) { // 助詞はついてなかった。なにもしない。 return(wTable); } // resultChainは 語+助詞のチェーン。WordTと入れ替える wChain.Swap(wTable, resultChain); // 助詞で始まる熟語でないかチェック WordTable idiomwt = Idiom.Search(wChain, resultChain.Tail); // resultChainの先頭は未処理。 // いったんcurrentをresultChainの先頭に戻す // 위원회를 ---> 위원회 + 를 // wTable resultChain.Head [を]:翻訳済み wTable = resultChain.Head; return(wTable); }