复合词分离

本文介绍了一种用于判断中文复合词的有效算法。该算法通过递归方式检查输入字符串是否能够被切分成已知词汇表中存在的独立词语。文章详细解释了核心函数`CutCom`的工作原理及其辅助函数的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

//功能:isword()为判断是否为词库中的词的函数,通过递归判断一个词是否是复合词(词可以拆成若干独立的词)

int CutCom(char *str)

 wordCount++;   // 全局变量,初始值为0
 if(str == 0) return 1;
 if(strlen(str) == 0) return 1;
 if(strlen(str) < 4) return 0;
 int len = strlen(str);
 char *str_pre = (char *)calloc(sizeof(char),len);

 int i = 4;
 while(i < len + 1){ //i没有自加
  char *str_suf = (char *)calloc(sizeof(char),len - i + 1);
  wordcopy_pre(str_pre,str,i);
  wordcopy_suf(str_suf,str,i);
  str_pre[i] ='\0';
  if((len == i) && len == length_StrArr) return 0;    // legnth_StrArr 全局变量,初始值为0

  if(isword(str_pre)&&CutCom(str_suf))
   { 
    fputs(str_pre,fComToWords);
    fputs("\r",fComToWords);
    fputs("\n",fComToWords);
    return 1;
  }
  wordCount = 0;
  i++;
  i++;
  
  
 }
 if((i == len + 2) && wordCount == 0)
  return 0;

}

void wordcopy_pre(char *str_p,char *str,int i)
{
 int len = i;
 char *pstr_p = str_p;
 char *pstr = str;
 int index(0);
 int count(0);
 while(index++ < len){
  //count++;
  *pstr_p++ = *pstr++;
 
 }

}

void wordcopy_suf(char *str_suf,char *str,int i)
{
 int index(0);
 int len = i;
 char *pstr = str;
 char *pstr_suf = str_suf;
 while(index++ < len)
  *pstr++;
 while(*pstr){
  *pstr_suf++ = *pstr++; 
 }
}
int isword(char *str)
{
  char *StrArr = str;
 int ArrIndex = ELFHash(StrArr);

 int   Location = Arr[ArrIndex].SearchList(StrArr);
   if(Location<0)
    return 0;
     else
    return 1;
 
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值