资源简介

本程序是北京师范大学学生根据一个中文字库对所给的文章进行分词。有详细说明文档和exe文件,采用C语言编写,具体在文档中完全说明。采用的算法是正向最大匹配算法和反向最大匹配算法。主要实现屏幕分词和文件分词两项功能。因为对毕业设计有所帮助,所以我要分高一点哈~勿怪偶~

资源截图

代码片段和文件信息


/*-----------------------------中文分词程序------------------------------
------------------------计算机系03级 03281047 刘川----------------------*/

// stdafx.cpp : source file that includes just the standard includes
// wordppl.pch will be the pre-compiled header
// stdafx.obj will contain the pre-compiled type information

#include “stdafx.h“
#include 

// TODO: reference any additional headers you need in STDAFX.H
// and not in this file

extern char tt[][40];

char * source* result; //文件暂存数组
int sum; //字典长度
FILE *fp1*fp2; //定义两个文件指针
long filelen; //输入文件的长度
char scrbuf[MD]; //屏幕文件缓冲区
char scrres[SD]; //屏幕文件结果区

/*------------------------------------分词实现部分-----------------------------------------*/
//比较函数
int compare(const void* aconst void* b){
return strcmp((char*)a(char*)b);
}

//折半查找算法
int binsearch(int Lenchar *aidkey)
{ int lowhighmid;
low=0;high=Len-1;
while(low<=high)
{
mid=(low+high)/2;
if(strcmp(aidkeytt[mid])==0)
return mid; //查找成功
else if(strcmp(tt[mid]aidkey)>0)
high=mid-1; //修改查找区间上界
else
low=mid+1; //修改查找区间下界
}
return -1; //查找失败
}

//初始化函数
int initialize()
{

sum=53335;
qsort(ttsum40*sizeof(char)compare); //对字典进行排序
return 1;
}

//屏幕分词函数,采用正向最大匹配算法
void scrposcutword()
{
int ijk; //普通变量
int end; //为1标示已经扫描完待分析文件,反之为0
int mask=0; //遇到不能识别字符则标记为1,否则为0
int bpsbrp; //bp为字符串已识别指针,sb为临时用指针sp为结果数组指针
char ch[2]buffer[37];

filelen=strlen(scrbuf);
strcpy(scrres““);
//分词主程序部分,采用正向最大匹配算法
bp=0;rp=0;
while(1)
{ buffer[0]=0;
sb=bp;
for(i=0;i<36;i++) //从源数组中读入36个字符
{
if(sb==filelen&&i==0) { end=1; break; } //读到的第一个字符为文件尾,于是退出
if(sb==filelen) //遇到文件尾,跳出循环
break;
ch[1]=0;
ch[0]=scrbuf[sb];
strcat(bufferch);
sb++;
}
if(end==1)break;


for(i=i-1;i>=0;i--)
{
k=strlen(buffer);
j=-1;
if( strcmp(buffer“0“)==0||strcmp(buffer“1“)==0||strcmp(buffer“2“)==0||strcmp(buffer“3“)==0||strcmp(buffer“4“)==0||
strcmp(buffer“5“)==0||strcmp(buffer“6“)==0||strcmp(buffer“8“)==0||strcmp(buffer“7“)==0||strcmp(buffer“9“)==0)
goto A;
j=binsearch(sumbuffer);
if(j!=-1) //如果查找到,则输出查找到的内容,并将bp指针往前移相应位置
{ if(mask==1) { mask=0; scrres[rp]=‘|‘; rp++; scrres[rp]=0; }
strcat(scrresbuffer); rp+=k;
scrres[rp]=‘|‘; rp++; scrres[rp]=0;
bp=bp+k;
break;
}
else //如果查不到
{
A: if(i==1) //若还剩2个字节,则判断第一个字节,若大于0,说明不是汉字,输出一个字节
{ buffer[2]=0; //若小于0,说明该汉字不在此库中,输出该字。并将bp指针往前移相应位置
if(buffer[0]<0)
{ strcat(scrresbuffer); rp+=2; scrres[rp]=0; bp=bp+2; mask=1; break;}
else
{ buffer[1]=0;
strcat(scrresbuffer); rp+=1; scrres[rp]=0; bp=bp+1; mask=1; break; 

}
if(i==0) //若还剩1个字节,说明肯定是不能识别字符,则直接输出这个字节,并将bp指针往前移1个字节
{ buffer[1]=0; 
strcat(scrresbuffer); rp++; scrres[rp]=0; bp=bp+1; mask=1; break; 
}
buffer[i]=0; //将buffer最后一位去掉,再进

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       2075  2005-11-26 22:59  采用正向逆向最大匹配才实现汉字分词wordppl\wordppl\ReadMe.txt

     文件       1925  2005-11-30 15:57  采用正向逆向最大匹配才实现汉字分词wordppl\wordppl\resource.h

     文件        318  2005-11-28 15:58  采用正向逆向最大匹配才实现汉字分词wordppl\wordppl\small.ico

     文件      11167  2005-12-06 13:55  采用正向逆向最大匹配才实现汉字分词wordppl\wordppl\StdAfx.cpp

     文件       1185  2005-11-30 19:45  采用正向逆向最大匹配才实现汉字分词wordppl\wordppl\StdAfx.h

     文件     520061  2005-11-30 15:13  采用正向逆向最大匹配才实现汉字分词wordppl\wordppl\wordlist.cpp

     文件       8324  2005-12-08 18:50  采用正向逆向最大匹配才实现汉字分词wordppl\wordppl\wordppl.aps

     文件      14031  2005-11-30 19:51  采用正向逆向最大匹配才实现汉字分词wordppl\wordppl\wordppl.cpp

     文件       4513  2005-11-29 11:13  采用正向逆向最大匹配才实现汉字分词wordppl\wordppl\wordppl.dsp

     文件        537  2005-11-26 22:59  采用正向逆向最大匹配才实现汉字分词wordppl\wordppl\wordppl.dsw

     文件       1078  2005-12-08 18:50  采用正向逆向最大匹配才实现汉字分词wordppl\wordppl\wordppl.ICO

     文件      99328  2005-12-08 18:50  采用正向逆向最大匹配才实现汉字分词wordppl\wordppl\wordppl.ncb

     文件      54784  2005-12-08 18:50  采用正向逆向最大匹配才实现汉字分词wordppl\wordppl\wordppl.opt

     文件       1981  2005-12-08 18:50  采用正向逆向最大匹配才实现汉字分词wordppl\wordppl\wordppl.plg

     文件       5468  2005-12-08 18:50  采用正向逆向最大匹配才实现汉字分词wordppl\wordppl\wordppl.rc

     文件    3076205  2005-12-08 18:50  采用正向逆向最大匹配才实现汉字分词wordppl\wordppl.exe

     文件      46080  2005-12-06 13:58  采用正向逆向最大匹配才实现汉字分词wordppl\中文分词程序说明文档.doc

     文件        157  2009-09-03 16:44  采用正向逆向最大匹配才实现汉字分词wordppl\哈哈.txt

     文件          0  2009-09-03 16:47  采用正向逆向最大匹配才实现汉字分词wordppl\嘿嘿.txt

     文件        626  2005-12-01 18:54  采用正向逆向最大匹配才实现汉字分词wordppl\测试文本一.txt

     文件        841  2005-12-06 13:56  采用正向逆向最大匹配才实现汉字分词wordppl\测试文本一_neg.txt

     文件        842  2005-12-01 21:14  采用正向逆向最大匹配才实现汉字分词wordppl\测试文本一_pos.txt

     文件      26373  2005-11-26 22:53  采用正向逆向最大匹配才实现汉字分词wordppl\测试文本二.txt

     文件      35001  2005-12-01 21:16  采用正向逆向最大匹配才实现汉字分词wordppl\测试文本二_neg.txt

     文件      35000  2005-12-01 21:14  采用正向逆向最大匹配才实现汉字分词wordppl\测试文本二_pos.txt

     目录          0  2009-09-09 09:36  采用正向逆向最大匹配才实现汉字分词wordppl\wordppl

     目录          0  2009-09-03 16:47  采用正向逆向最大匹配才实现汉字分词wordppl

----------- ---------  ---------- -----  ----

              3947900                    27



............此处省略0个文件信息

评论

共有 条评论