Source code of Windows XP (NT5)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

1130 lines
40 KiB

/////////////////////////////////////////////////////////////////////////////
//
// Copyright (C) 1997, Microsoft Corporation. All Rights Reserved.
//
/////////////////////////////////////////////////////////////////////////////
#include "basecik.hpp"
#include "MainDict.h"
//----------------------------------------------------------------------------------------------
//
// Function Name : NLP_Cikha_Proc()
// Parameters : char *stem
// Summary :
// Call Functions :
// Description :
// Return Value :
//
//----------------------------------------------------------------------------------------------
int BaseEngine::NLP_Cikha_Proc(char *stem)
{
char r_vowel,
tmpstem[80],
tmpending[10];
int len, ix, res, ulspos, temp;
lstrcpy(tmpstem, stem);
ulspos = lstrlen(tmpstem)-1;
if(__IsDefStem(ulspos, 5) == 1 &&
tmpstem[ulspos-5] == __K_M && tmpstem[ulspos-4] == __K_J &&
tmpstem[ulspos-3] == __V_l && tmpstem[ulspos-2] == __K_G &&
tmpstem[ulspos-1] == __K_H && tmpstem[ulspos] == __V_k)
{
temp = ulspos;
__DelStemN(tmpstem, &temp, 6);
ulspos = temp;
if(((len = NLP_Cikha_Conditions(tmpstem, TempCikha[0])) != INVALID) ||
((len = NLP_Cikha_Conditions(tmpstem, TempCikha[1])) != INVALID))
{
r_vowel = UDEF; // undefined
for(ix = ulspos - len ; ix >= 0; ix--)
{
if (tmpstem[ix] >= __V_k)
{
r_vowel = tmpstem[ix];
break;
}
}
if (r_vowel == __V_k || r_vowel == __V_h || r_vowel == __V_i)
{
temp = ulspos;
__DelStemN(tmpstem, &temp, len);
ulspos = temp;
if((res = NLP_AUX_Find(tmpstem, 0)) < INVALID)
{
return Cikha_VALID;
}
switch(tmpstem[ulspos])
{
case __K_B:
if(FindIrrWord(tmpstem, _IV_BP) & FINAL)
{
return INVALID;
}
break;
case __K_S:
if(FindIrrWord(tmpstem, _IV_SP) & FINAL)
{
return INVALID;
}
break;
case __K_D:
if(FindIrrWord(tmpstem, _IV_DP) & FINAL)
{
if(FindIrrWord(tmpstem, _RV_D) & FINAL) // v2r
{
char tstem [80];
Conv.INS2HAN (tmpstem, tstem, codeWanSeong);
lstrcat (lrgsz, tstem);
vbuf [wcount++] = POS_VERB;
return Cikha_VALID;
}
return INVALID;
}
break;
case __K_R:
__RepStem1(tmpstem, ulspos, __K_D);
if(FindIrrWord(tmpstem, _IV_DP) & FINAL)
{
char tstem [80];
Conv.INS2HAN (tmpstem, tstem, codeWanSeong);
lstrcat (lrgsz, tstem);
vbuf [wcount++] = POS_VERB;
return Cikha_VALID;
}
__RepStem1(tmpstem, ulspos, __K_R);
break;
}
if(tmpstem[ulspos] >= __V_k)
{
temp = ulspos;
__AddStem1(tmpstem, &temp, __K_S);
ulspos = temp;
if(FindIrrWord(tmpstem, _IV_SP) & FINAL)
{
char tstem [80];
Conv.INS2HAN (tmpstem, tstem, codeWanSeong);
lstrcat (lrgsz, tstem);
vbuf [wcount++] = POS_ADJECTIVE;
return Cikha_VALID;
}
__RepStem1(tmpstem, ulspos, __K_I);
temp = ulspos;
__AddStem1(tmpstem, &temp, __V_m);
ulspos = temp;
if(FindIrrWord(tmpstem, _IV_OmP) & FINAL)
{
char tstem [80];
Conv.INS2HAN (tmpstem, tstem, codeWanSeong);
lstrcat (lrgsz, tstem);
vbuf [wcount++] = POS_ADJECTIVE;
return Cikha_VALID;
}
temp = ulspos;
__DelStem2(tmpstem, &temp);
ulspos = temp;
if(tmpstem[ulspos] == __V_k)
{
return MORECHECK;
}
}
char tstem [80];
Conv.INS2HAN (tmpstem, tstem, codeWanSeong);
if (FindSilsaWord (tstem) & _VERB)
{
lstrcat (lrgsz, tstem);
vbuf [wcount++] = POS_VERB;
return Cikha_VALID;
}
}
}
lstrcpy(tmpstem, stem);
ulspos = lstrlen(tmpstem)-1;
temp = ulspos;
__DelStemN(tmpstem, &temp, 6);
ulspos = temp;
if(((len = NLP_Cikha_Conditions(tmpstem, TempCikha[2])) != INVALID) ||
((len = NLP_Cikha_Conditions(tmpstem, TempCikha[3])) != INVALID))
{
r_vowel = UDEF; // undefined
for(ix = ulspos - len ; ix >= 0; ix--)
{
if (tmpstem[ix] >= __V_k)
{
r_vowel = tmpstem[ix];
break;
}
}
if (r_vowel != __V_k && r_vowel != __V_h && r_vowel != __V_i)
{
temp = ulspos;
__DelStemN(tmpstem, &temp, len);
ulspos = temp;
if((res = NLP_AUX_Find(tmpstem, 0)) < INVALID)
{
return Cikha_VALID;
}
switch(tmpstem[ulspos])
{
case __K_B:
if(FindIrrWord(tmpstem, _IV_BM) & FINAL)
{
return INVALID;
}
break;
case __K_S:
if(FindIrrWord(tmpstem, _IV_SM) & FINAL)
{
return INVALID;
}
break;
case __K_D:
if(FindIrrWord(tmpstem, _IV_DM) & FINAL)
{
if(FindIrrWord(tmpstem, _RV_D) & FINAL) // v2r
{
char tstem [80];
Conv.INS2HAN (tmpstem, tstem, codeWanSeong);
lstrcat (lrgsz, tstem);
vbuf [wcount++] = POS_VERB;
return Cikha_VALID;
}
return INVALID;
}
break;
case __K_R:
__RepStem1(tmpstem, ulspos, __K_D);
if(FindIrrWord(tmpstem, _IV_DM) & FINAL)
{
char tstem [80];
Conv.INS2HAN (tmpstem, tstem, codeWanSeong);
lstrcat (lrgsz, tstem);
vbuf [wcount++] = POS_VERB;
return Cikha_VALID;
}
__RepStem1(tmpstem, ulspos, __K_R);
break;
}
if(tmpstem[ulspos] >= __V_k)
{
temp = ulspos;
__AddStem1(tmpstem, &temp, __K_S);
ulspos = temp;
if(FindIrrWord(tmpstem, _IV_SM) & FINAL)
{
char tstem [80];
Conv.INS2HAN (tmpstem, tstem, codeWanSeong);
lstrcat (lrgsz, tstem);
vbuf [wcount++] = POS_VERB;
return Cikha_VALID;
}
temp = ulspos;
__DelStem1(tmpstem, &temp);
ulspos = temp;
if(tmpstem[ulspos] == __V_j)
{
return MORECHECK;
}
}
char tstem [80];
Conv.INS2HAN (tmpstem, tstem, codeWanSeong);
if (FindSilsaWord (tstem) & _VERB)
{
lstrcat (lrgsz, tstem);
vbuf [wcount++] = POS_VERB;
return Cikha_VALID;
}
}
}
lstrcpy(tmpstem, stem);
ulspos = lstrlen(tmpstem)-1;
temp = ulspos;
__DelStemN(tmpstem, &temp, 6);
ulspos = temp;
if(((len = NLP_Cikha_Conditions(tmpstem, TempCikha[4])) != INVALID) ||
((len = NLP_Cikha_Conditions(tmpstem, TempCikha[5])) != INVALID))
{
if(tmpstem[ulspos-len] >= __V_k)
{
temp = ulspos;
__DelStemN(tmpstem, &temp, len);
ulspos = temp;
if(len == 6)
{
lstrcpy(tmpending, TempCikha[4]);
}
else
{
lstrcpy(tmpending, TempCikha[5]);
}
_strrev(tmpending);
if((res = NLP_Cikha_SS(tmpstem, tmpending)) < INVALID)
{
return Cikha_VALID;
}
return res;
}
}
if((len = NLP_Cikha_Conditions(tmpstem, TempCikha[6])) != INVALID)
{
if(tmpstem[ulspos-len] <= __K_H)
{
temp = ulspos;
__DelStemN(tmpstem, &temp, len);
ulspos = temp;
if((res = NLP_AUX_Find(tmpstem, 0)) < INVALID)
{
return Cikha_VALID;
}
switch(tmpstem[ulspos])
{
case __K_B:
if((FindIrrWord(tmpstem, _IV_BP) & FINAL) ||
(FindIrrWord(tmpstem, _IV_BM) & FINAL))
{
return INVALID;
}
break;
case __K_S:
if((FindIrrWord(tmpstem, _IV_SP) & FINAL) ||
(FindIrrWord(tmpstem, _IV_SM) & FINAL))
{
return INVALID;
}
break;
case __K_D:
if((FindIrrWord(tmpstem, _IV_DP) & FINAL) ||
(FindIrrWord(tmpstem, _IV_DM) & FINAL))
{
if(FindIrrWord(tmpstem, _RV_D) & FINAL) // v2r
{
char tstem [80];
Conv.INS2HAN (tmpstem, tstem, codeWanSeong);
lstrcat (lrgsz, tstem);
vbuf [wcount++] = POS_VERB;
return Cikha_VALID;
}
return INVALID;
}
break;
}
char tstem [80];
Conv.INS2HAN (tmpstem, tstem, codeWanSeong);
if (FindSilsaWord (tstem) & _VERB)
{
lstrcat (lrgsz, tstem);
vbuf [wcount++] = POS_VERB;
return Cikha_VALID;
}
temp = ulspos;
__AddStem2(tmpstem, &temp, __K_I, __V_m);
ulspos = temp;
}
}
if(tmpstem[ulspos] >= __V_k)
{
if((res = NLP_AUX_Find(tmpstem, 0)) < INVALID)
{
return Cikha_VALID;
}
char tstem [80];
Conv.INS2HAN (tmpstem, tstem, codeWanSeong);
if (FindSilsaWord (tstem) & _VERB)
{
lstrcat (lrgsz, tstem);
vbuf [wcount++] = POS_VERB;
return Cikha_VALID;
}
if(__IsDefStem(ulspos, 1) == 1 && tmpstem[ulspos-1] == __K_I && tmpstem[ulspos] == __V_m)
{
temp = ulspos;
__DelStem2(tmpstem, &temp);
ulspos = temp;
if(tmpstem[ulspos] == __K_R)
{
__RepStem1(tmpstem, ulspos, __K_D);
if((FindIrrWord(tmpstem, _IV_DP) & FINAL) || // v2+
(FindIrrWord(tmpstem, _IV_DM) & FINAL)) // v2-
{
char tstem [80];
Conv.INS2HAN (tmpstem, tstem, codeWanSeong);
lstrcat (lrgsz, tstem);
vbuf [wcount++] = POS_VERB;
return Cikha_VALID;
}
return INVALID;
}
if(tmpstem[ulspos] >= __V_k)
{
temp = ulspos;
__AddStem1(tmpstem, &temp, __K_S);
ulspos = temp;
if((FindIrrWord(tmpstem, _IV_SP) & FINAL) || // v4+
(FindIrrWord(tmpstem, _IV_SM) & FINAL)) // v4-
{
char tstem [80];
Conv.INS2HAN (tmpstem, tstem, codeWanSeong);
lstrcat (lrgsz, tstem);
vbuf [wcount++] = POS_VERB;
return Cikha_VALID;
}
return INVALID;
}
}
else if(__IsDefStem(ulspos, 1) == 1 && tmpstem[ulspos-1] == __K_I && tmpstem[ulspos] == __V_n)
{
temp = ulspos;
__DelStem1(tmpstem, &temp);
ulspos = temp;
__RepStem1(tmpstem, ulspos, __K_B);
if(FindIrrWord(tmpstem, _IV_BM) & FINAL) // v3-
{
char tstem [80];
Conv.INS2HAN (tmpstem, tstem, codeWanSeong);
lstrcat (lrgsz, tstem);
vbuf [wcount++] = POS_VERB;
return Cikha_VALID;
}
if(__IsDefStem(ulspos, 2) == 1 && __IsDefStem(ulspos, 3) == 0 &&
tmpstem[ulspos-2] == __K_D && tmpstem[ulspos-1] == __V_h && tmpstem[ulspos] == __K_B)
{
char tstem [80];
Conv.INS2HAN (tmpstem, tstem, codeWanSeong);
lstrcat (lrgsz, tstem);
vbuf [wcount++] = POS_VERB;
return Cikha_VALID;
}
}
else if(__IsDefStem(ulspos, 1) == 1 && tmpstem[ulspos-1] == __K_I && tmpstem[ulspos] == __V_h)
{
temp = ulspos;
__DelStem1(tmpstem, &temp);
ulspos = temp;
__RepStem1(tmpstem, ulspos, __K_B);
if(__IsDefStem(ulspos, 2) == 1 && __IsDefStem(ulspos, 3) == 0 &&
tmpstem[ulspos-2] == __K_D && tmpstem[ulspos-1] == __V_h && tmpstem[ulspos] == __K_B)
{
return INVALID;
}
if(FindIrrWord(tmpstem, _IV_BP) & FINAL) // v3+
{
char tstem [80];
Conv.INS2HAN (tmpstem, tstem, codeWanSeong);
lstrcat (lrgsz, tstem);
vbuf [wcount++] = POS_VERB;
return Cikha_VALID;
}
}
return BT;
}
}
return MORECHECK;
}
//----------------------------------------------------------------------------------------------
//
// Function Name : NLP_Cikha_Conditions()
// Parameters : char *stem
// char *conditions
// Summary :
// Call Functions :
// Description :
// Return Value :
//
//----------------------------------------------------------------------------------------------
int BaseEngine::NLP_Cikha_Conditions(char *stem, char *condition)
{
int i_stem = lstrlen(stem) - 1;
int i_condition = lstrlen(condition) - 1;
for( ; i_condition >= 0 && i_stem >= 0 ; )
{
if(stem[i_stem] != condition[i_condition])
{
return INVALID;
}
i_stem--;
i_condition--;
}
if(i_condition = -1 && i_stem >= 0)
{
return lstrlen(condition);
}
return INVALID;
}
//----------------------------------------------------------------------------------------------
//
// Function Name : NLP_Cikha_SS()
// Parameters : char *stem
// char *conditions
// Summary :
// Call Functions :
// Description :
// Return Value :
//
//----------------------------------------------------------------------------------------------
int BaseEngine::NLP_Cikha_SS(char *stem, char *ending)
{
char tmp[80];
int ret, rULSPOS, temp;
rULSPOS = lstrlen(stem)-1;
lstrcpy(tmp, stem);
ret = MORECHECK;
switch (stem[rULSPOS])
{
case __V_l :
ret = NLP_Cikha_SS_Vl(stem, ending);
break;
case __V_u :
if (__IsDefStem(rULSPOS, 1) == 1 && stem[rULSPOS-1] == __K_I)
{
ret = NLP_Cikha_SS_Vu_mrg(stem, ending);
if (ret == Machine_T)
{
temp = rULSPOS;
__DelStem2(tmp, &temp);
rULSPOS = temp;
if ((ret = NLP_Machine_T(tmp, ending)) == MORECHECK)
{
ret = BT;
}
}
break;
}
else
{
ret = NLP_Cikha_SS_Vu_irr(stem, ending);
}
break;
case __V_nj :
ret = NLP_Cikha_SS_Vnj(stem, ending);
break;
case __V_hk :
ret = NLP_Cikha_SS_Vhk(stem, ending);
break;
case __V_ho :
ret = NLP_Cikha_SS_Vho(stem, ending);
break;
case __V_o :
if (__IsDefStem(rULSPOS, 1) == 1 && stem[rULSPOS-1] == __K_H)
{
ret = NLP_Cikha_SS_Vo_KH(stem, ending);
}
else
{
ret = NLP_Cikha_SS_Vo(stem, ending);
}
break;
case __V_p :
ret = NLP_Cikha_SS_Vp(stem);
break;
case __V_j :
if (__IsDefStem(rULSPOS, 1) == 1 && stem[rULSPOS-1] == __K_R)
ret = NLP_Cikha_SS_Vj_KR(stem);
else ret = NLP_Cikha_SS_Vj(stem);
break;
case __V_k :
ret = NLP_Cikha_SS_Vk(stem, ending);
break;
default : ret = BT;
}
return ret;
}
// ----------------------------------------------------------------------
//
//
// ----------------------------------------------------------------------
int BaseEngine::NLP_Cikha_SS_Vl(char *stem,
char *ending)
{
char bupstem[80];
int res, rULSPOS, rLMEPOS, temp;
lstrcpy(bupstem, stem);
rULSPOS = lstrlen(stem)-1;
rLMEPOS = lstrlen(ending)-1;
if (__IsDefStem(rULSPOS, 1) == 1 && bupstem[rULSPOS-1] == __K_I )
{
if (__IsDefEnd(rLMEPOS, 0) == 1 && ending[rLMEPOS] == __K_S_D)
{
temp = rULSPOS;
__AddStem1(bupstem, &temp, __K_S_D);
rULSPOS = temp;
if((res = NLP_AUX_Find(bupstem, 0)) < INVALID)
{
return res;
}
if((res = NLP_AUX_Find(bupstem, 1)) < INVALID)
{
return res;
}
if (FindIrrWord(bupstem, _ISS) & FINAL)
{
char tstem [80];
Conv.INS2HAN (bupstem, tstem, codeWanSeong);
lstrcat (lrgsz, tstem);
vbuf [wcount++] = POS_VERB;
return Cikha_VALID;
}
}
return INVALID;
}
return BT;
}
// ----------------------------------------------------------------------
//
//
// ----------------------------------------------------------------------
int BaseEngine::NLP_Cikha_SS_Vu_mrg(char *stem,
char *ending)
{
char bupstem[80];
int res, rULSPOS, temp;
rULSPOS = lstrlen(stem)-1;
lstrcpy(bupstem, stem);
if (__IsDefStem(rULSPOS, 3) == 1 &&
bupstem[rULSPOS-3] == __K_H && bupstem[rULSPOS-2] == __V_k )
{
temp = rULSPOS;
__DelStem2(bupstem, &temp);
rULSPOS = temp;
if ((res = NLP_AUX_Find(bupstem, 0)) < INVALID)
{
return res;
}
char tstem [80];
Conv.INS2HAN (bupstem, tstem, codeWanSeong);
if (FindSilsaWord (tstem) & _VERB)
{
lstrcat (lrgsz, tstem);
vbuf [wcount++] = POS_VERB;
return Cikha_VALID;
}
return BT;
}
__RepStem1(bupstem, rULSPOS, __V_l);
if ((res = NLP_AUX_Find(bupstem, 0)) < INVALID)
{
return res;
}
char tstem [80];
Conv.INS2HAN (bupstem, tstem, codeWanSeong);
if (FindSilsaWord (tstem) & _VERB)
{
lstrcat (lrgsz, tstem);
vbuf [wcount++] = POS_VERB;
return Cikha_VALID;
}
if (ACT_N_E == 1 && bupstem[rULSPOS-2] >= __V_k)
{
return Machine_T;
}
return BT;
}
// ----------------------------------------------------------------------
//
//
// ----------------------------------------------------------------------
int BaseEngine::NLP_Cikha_SS_Vu_irr(char *stem,
char *ending)
{
char bupstem[80];
int res, rULSPOS;
rULSPOS = lstrlen(stem)-1;
lstrcpy(bupstem,stem);
if (FindIrrWord(bupstem, _ZUV_YO) & FINAL)
{
char tstem [80];
Conv.INS2HAN (bupstem, tstem, codeWanSeong);
lstrcat (lrgsz, tstem);
vbuf [wcount++] = POS_VERB;
return Cikha_VALID;
}
__RepStem1(bupstem, rULSPOS, __V_l);
if ((res = NLP_AUX_Find(bupstem, 0)) < INVALID)
{
return res;
}
char tstem [80];
Conv.INS2HAN (bupstem, tstem, codeWanSeong);
if (FindSilsaWord (tstem) & _VERB)
{
char tstem [80];
Conv.INS2HAN (bupstem, tstem, codeWanSeong);
lstrcat (lrgsz, tstem);
vbuf [wcount++] = POS_VERB;
return Cikha_VALID;
}
return BT;
}
// ----------------------------------------------------------------------
//
//
// ----------------------------------------------------------------------
int BaseEngine::NLP_Cikha_SS_Vnj(char *stem,
char *ending)
{
char bupstem[80];
int res, rULSPOS, temp;
rULSPOS = lstrlen(stem)-1;
lstrcpy(bupstem,stem);
__RepStem1(bupstem, rULSPOS, __V_n);
if ((res = NLP_AUX_Find(bupstem, 0)) < INVALID)
{
return res;
}
char tstem [80];
Conv.INS2HAN (bupstem, tstem, codeWanSeong);
if (FindSilsaWord (tstem) & _VERB)
{
lstrcat (lrgsz, tstem);
vbuf [wcount++] = POS_VERB;
return Cikha_VALID;
}
if (__IsDefStem(rULSPOS, 1) == 1 && bupstem[rULSPOS-1] == __K_I)
{
temp = rULSPOS;
__DelStem1(bupstem, &temp);
rULSPOS = temp;
__RepStem1(bupstem, rULSPOS, __K_B);
if (FindIrrWord(bupstem, _IV_BM) & FINAL)
{
char tstem [80];
Conv.INS2HAN (bupstem, tstem, codeWanSeong);
lstrcat (lrgsz, tstem);
vbuf [wcount++] = POS_VERB;
return Cikha_VALID;
}
}
return BT;
}
// ----------------------------------------------------------------------
//
//
// ----------------------------------------------------------------------
int BaseEngine::NLP_Cikha_SS_Vhk(char *stem,
char *ending)
{
char bupstem[80];
int res, rULSPOS, temp;
rULSPOS = lstrlen(stem)-1;
lstrcpy(bupstem,stem);
__RepStem1(bupstem, rULSPOS, __V_h);
if ((res = NLP_AUX_Find(bupstem, 0)) < INVALID)
{
return res;
}
char tstem [80];
Conv.INS2HAN (bupstem, tstem, codeWanSeong);
if (FindSilsaWord (tstem) & _VERB)
{
char tstem [80];
Conv.INS2HAN (bupstem, tstem, codeWanSeong);
lstrcat (lrgsz, tstem);
vbuf [wcount++] = POS_VERB;
return Cikha_VALID;
}
if (__IsDefStem(rULSPOS, 1) == 1 && bupstem[rULSPOS-1] == __K_I)
{
temp = rULSPOS;
__DelStem1(bupstem, &temp);
rULSPOS = temp;
__RepStem1(bupstem, rULSPOS, __K_B);
if (FindIrrWord(bupstem, _IV_BP) & FINAL)
{
char tstem [80];
Conv.INS2HAN (bupstem, tstem, codeWanSeong);
lstrcat (lrgsz, tstem);
vbuf [wcount++] = POS_VERB;
return Cikha_VALID;
}
}
return BT;
}
// ----------------------------------------------------------------------
//
//
// ----------------------------------------------------------------------
int BaseEngine::NLP_Cikha_SS_Vho(char *stem,
char *ending)
{
char bupstem[80];
int res, rULSPOS;
rULSPOS = lstrlen(stem)-1;
lstrcpy(bupstem,stem);
__RepStem1(bupstem, rULSPOS, __V_hl);
if ((res = NLP_AUX_Find(bupstem, 0)) < INVALID)
{
return res;
}
char tstem [80];
Conv.INS2HAN (bupstem, tstem, codeWanSeong);
if (FindSilsaWord (tstem) & _VERB)
{
lstrcat (lrgsz, tstem);
vbuf [wcount++] = POS_VERB;
return Cikha_VALID;
}
return BT;
}
// ----------------------------------------------------------------------
//
//
// ----------------------------------------------------------------------
int BaseEngine::NLP_Cikha_SS_Vo_KH(char *stem,
char *ending)
{
char bupstem[80];
int res, rULSPOS;
rULSPOS = lstrlen(stem)-1;
lstrcpy(bupstem,stem);
__RepStem1(bupstem, rULSPOS, __V_k);
if ((res = NLP_AUX_Find(bupstem, 0)) < INVALID)
{
return res;
}
char tstem [80];
Conv.INS2HAN (bupstem, tstem, codeWanSeong);
if (FindSilsaWord (tstem) & _VERB)
{
lstrcat (lrgsz, tstem);
vbuf [wcount++] = POS_VERB;
return Cikha_VALID;
}
return BT;
}
// ----------------------------------------------------------------------
//
//
// ----------------------------------------------------------------------
int BaseEngine::NLP_Cikha_SS_Vo(char *stem,
char *ending)
{
char bupstem[80];
int res, rULSPOS;
rULSPOS = lstrlen(stem)-1;
lstrcpy(bupstem,stem);
if ((res = NLP_AUX_Find(bupstem, 0)) < INVALID)
{
return res;
}
char tstem [80];
Conv.INS2HAN (bupstem, tstem, codeWanSeong);
if (FindSilsaWord (tstem) & _VERB)
{
lstrcat (lrgsz, tstem);
vbuf [wcount++] = POS_VERB;
return Cikha_VALID;
}
return BT;
}
// ----------------------------------------------------------------------
//
//
// ----------------------------------------------------------------------
int BaseEngine::NLP_Cikha_SS_Vp( char *stem)
{
char bupstem[80];
int rULSPOS;
rULSPOS = lstrlen(stem)-1;
lstrcpy(bupstem,stem);
if (FindIrrWord(bupstem, _ZUV_E) & FINAL)
{
char tstem [80];
Conv.INS2HAN (bupstem, tstem, codeWanSeong);
lstrcat (lrgsz, tstem);
vbuf [wcount++] = POS_VERB;
return Cikha_VALID;
}
return BT;
}
// ----------------------------------------------------------------------
//
//
// ----------------------------------------------------------------------
int BaseEngine::NLP_Cikha_SS_Vil( char *stem)
{
char bupstem[80];
int rULSPOS, temp;
rULSPOS = lstrlen(stem)-1;
lstrcpy(bupstem,stem);
if (__IsDefStem(rULSPOS, 1) == 1 && bupstem[rULSPOS-1] == __K_I)
{
__RepStem1(bupstem, rULSPOS, __V_i);
temp = rULSPOS;
__AddStem1(bupstem, &temp, __K_H);
rULSPOS = temp;
if (FindIrrWord(bupstem, _IA_HP) & FINAL)
{
char tstem [80];
Conv.INS2HAN (bupstem, tstem, codeWanSeong);
lstrcat (lrgsz, tstem);
vbuf [wcount++] = POS_ADJECTIVE;
return Cikha_VALID;
}
__RepStem2(bupstem, rULSPOS, __V_u, __K_H);
if (FindIrrWord(bupstem, _IA_HM) & FINAL)
{
char tstem [80];
Conv.INS2HAN (bupstem, tstem, codeWanSeong);
lstrcat (lrgsz, tstem);
vbuf [wcount++] = POS_ADJECTIVE;
return Cikha_VALID;
}
}
return BT;
}
// ----------------------------------------------------------------------
//
//
// ----------------------------------------------------------------------
int BaseEngine::NLP_Cikha_SS_Vul( char *stem)
{
char bupstem[80];
int temp, rULSPOS;
rULSPOS = lstrlen(stem)-1;
lstrcpy(bupstem,stem);
if (__IsDefStem(rULSPOS, 1) == 1 && bupstem[rULSPOS-1] == __K_I)
{
__RepStem1(bupstem, rULSPOS, __V_u);
temp = rULSPOS;
__AddStem1(bupstem, &temp, __K_H);
rULSPOS = temp;
if (FindIrrWord(bupstem, _IA_HM) & FINAL)
{
char tstem [80];
Conv.INS2HAN (bupstem, tstem, codeWanSeong);
lstrcat (lrgsz, tstem);
vbuf [wcount++] = POS_ADJECTIVE;
return Cikha_VALID;
}
}
return BT;
}
// ----------------------------------------------------------------------
//
//
// ----------------------------------------------------------------------
int BaseEngine::NLP_Cikha_SS_Vj_KR( char *stem)
{
char bupstem[80];
int rULSPOS, temp;
rULSPOS = lstrlen(stem)-1;
lstrcpy(bupstem,stem);
temp = rULSPOS;
__DelStem2(bupstem, &temp);
rULSPOS = temp;
if (bupstem[rULSPOS] == __K_R)
{
temp = rULSPOS;
__AddStem1(bupstem, &temp, __V_m);
rULSPOS = temp;
if (FindIrrWord(bupstem, _IV_RmM) & FINAL)
{
char tstem [80];
Conv.INS2HAN (bupstem, tstem, codeWanSeong);
lstrcat (lrgsz, tstem);
vbuf [wcount++] = POS_VERB;
return Cikha_VALID;
}
temp = rULSPOS;
__DelStem1(bupstem, &temp);
__AddStem2(bupstem, &temp, __K_R, __V_m);
rULSPOS = temp;
if (FindIrrWord(bupstem, _IV_OmM) & FINAL)
{
char tstem [80];
Conv.INS2HAN (bupstem, tstem, codeWanSeong);
lstrcat (lrgsz, tstem);
vbuf [wcount++] = POS_VERB;
return Cikha_VALID;
}
return BT;
}
temp = rULSPOS;
__AddStem2(bupstem, &temp, __K_R, __V_m);
rULSPOS = temp;
if (FindIrrWord(bupstem, _IV_OmM) & FINAL) //v8-
{
char tstem [80];
Conv.INS2HAN (bupstem, tstem, codeWanSeong);
lstrcat (lrgsz, tstem);
vbuf [wcount++] = POS_VERB;
return Cikha_VALID;
}
return BT;
}
// ----------------------------------------------------------------------
//
//
// ----------------------------------------------------------------------
int BaseEngine::NLP_Cikha_SS_Vj( char *stem)
{
char bupstem[80];
int rULSPOS;
rULSPOS = lstrlen(stem)-1;
lstrcpy(bupstem,stem);
if (__IsDefStem(rULSPOS, 1) == 1 && __IsDefStem(rULSPOS, 2) == 0 &&
bupstem[rULSPOS-1] == __K_P && bupstem[rULSPOS] == __V_j)
{
char tstem [80];
Conv.INS2HAN (bupstem, tstem, codeWanSeong);
lstrcat (lrgsz, tstem);
vbuf [wcount++] = POS_VERB;
return Cikha_VALID;
}
if (FindIrrWord(bupstem, _ZUV_O) & FINAL)
{
char tstem [80];
Conv.INS2HAN (bupstem, tstem, codeWanSeong);
lstrcat (lrgsz, tstem);
vbuf [wcount++] = POS_VERB;
return Cikha_VALID;
}
__RepStem1(bupstem, rULSPOS, __V_m);
if (FindIrrWord(bupstem, _IV_OmM) & FINAL)
{
char tstem [80];
Conv.INS2HAN (bupstem, tstem, codeWanSeong);
lstrcat (lrgsz, tstem);
vbuf [wcount++] = POS_VERB;
return Cikha_VALID;
}
return BT;
}
// ----------------------------------------------------------------------
//
//
// ----------------------------------------------------------------------
int BaseEngine::NLP_Cikha_SS_Vk( char *stem,
char *ending)
{
char bupstem[80];
int res, rULSPOS, temp;
rULSPOS = lstrlen(stem)-1;
lstrcpy(bupstem,stem);
if (__IsDefStem(rULSPOS, 1) == 1 && bupstem[rULSPOS-1] == __K_H)
{
return BT;
}
if ((res = NLP_AUX_Find(bupstem, 0)) < INVALID)
{
return res;
}
if (FindIrrWord(bupstem, _ZUV_A) & FINAL)
{
char tstem [80];
Conv.INS2HAN (bupstem, tstem, codeWanSeong);
lstrcat (lrgsz, tstem);
vbuf [wcount++] = POS_VERB;
return Cikha_VALID;
}
if (__IsDefStem(rULSPOS, 2) == 1 &&
bupstem[rULSPOS-1] == __K_R &&
bupstem[rULSPOS-2] == __K_R)
{
temp = rULSPOS;
__DelStem2(bupstem, &temp);
__AddStem1(bupstem, &temp, __V_m);
rULSPOS = temp;
if (FindIrrWord(bupstem, _IV_RmP) & FINAL)
{
char tstem [80];
Conv.INS2HAN (bupstem, tstem, codeWanSeong);
lstrcat (lrgsz, tstem);
vbuf [wcount++] = POS_VERB;
return Cikha_VALID;
}
return BT;
}
__RepStem1(bupstem, rULSPOS, __V_m);
if (FindIrrWord(bupstem, _IV_OmP) & FINAL)
{
char tstem [80];
Conv.INS2HAN (bupstem, tstem, codeWanSeong);
lstrcat (lrgsz, tstem);
vbuf [wcount++] = POS_VERB;
return Cikha_VALID;
}
return BT;
}