把规则库里面的规则转换成状态机里的各个状态。
伪代码如下:
struct s_table table[] =
{
/* pre_state cur_state next_state fun */
/*~~~~~~~~~~~~~~~~~~~~~~~~~~PRON1~~~~~~~~~~~~~~~~~~~~~~~~~*/
NUL, PRON1, VERB1, do_pron,
NUL, PRON1, VERB4, do_pron,
NUL, PRON1, VERB6, do_pron,
论文网http://www.751com.cn/
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~PRON2~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
NUL, PRON2, VERB2, do_pron,
NUL, PRON2, VERB4, do_pron,
NUL, PRON2, VERB6, do_pron,
/*~~~~~~~~~~~~~~~~~~~~~~~~PRON3~~~~~~~~~~~~~~~~~~~~~~~~~~*/
NUL, PRON3, VERB3, do_pron,
……
/*~~~~~~~~~~~~~~~~~~~~~~~~PRON4~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
VERB1, PRON4, NUL, do_pron,
……
/*~~~~~~~~~~~~~~~~~~~~~~~~~PRON5~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
NUL, PRON5, NOUN1, do_pron,
……
};
4、提取用户单词存入string[]数组中的单词,判断用户输入的字符串是否是句子
伪代码如下:
if (t == 1) //判断只有一个单词时,即特殊单词成句
{
if(judge(s[0]) == SPECIAL)
printf(" %s! is a sentence!\n ",string);
else
printf(" %s is not a sentence!\n ",string);
return;
}
for(i=0;i<t;i++)//判断多个单词时
{
cur_state = judge(s[i]);
if (i == t-1)
{
next_state = NUL; //当前状态为最终状态时,下一状态为空
}
else
{
next_state = judge(s[i+1]);
//当前状态不是最终状态,将后一状态赋给下一状态
}
if (cur_state == 0) //如果当前状态没有存在时,此时不是句子
{
for(i=0;i<t;i++)
{
printf(" %s ",s[i]);
}本文来自辣'文.论^文·网原文请找腾讯324.9114
printf("is not a sentence!\n ");
return;
}
j=0;
for(j=0;table[j].cur_state != NUL;j++)
//查找有没有满足条件的三个状态(PRE,CUR,NEXT),如果有找到就运行状态表里的函数
//(处理主,谓,宾),如果没有找到就说明没有满足条件的语法条件,所以不是句子。
{
if (cur_state == table[j].cur_state && pre_state == table[j].pre_state && next_state == table[j].next_state)
{
pre_state = cur_state;
(*table[j].fun)(&result[strlen(result)],i);
break;
}
}
if (table[j].cur_state == NUL) //在状态表里没有当前状态,则不满足条件,则输出不是句子
上一页 [1] [2] [3] [4] [5] [6] [7] [8]
用状态机解决句子语义分析 第8页下载如图片无法显示或论文不完整,请联系qq752018766