基于机器学习的英汉字典模糊查询毕业设计论文(编辑修改稿)内容摘要:

char word[WORDLEN]。 是 6 int count。 }Preference。 其中 word表示用户偏好的单词, count是该单词的的支持度计数,即在用户的输入中该单词被选中的频数。 3. 模式记录集 typedef struct{ char input[WORDLEN]。 //用户输入的单词 Preference pres[MAXPRES]。 //最多记录 5个偏好 }Record。 其中 input 是用户的非精确单词, pres 是该单词对应的用户偏好单词数组,最多 5 个记录。 文件 1. 单词的索引文件 存放的是一个个 Node 类型的数据,每个单词 /词组都有一个对应的 Node,这些数据按照单词的英文次序升序排列,因此在查找单词时可使用二分查找快速检索。 2. 词库文件 存放单词的释义 3. 用户输入记录文件 存放用户输入的非精确单词,及该单词对应的 lcs 模糊查询结果集 4. 模式记录文件 存放的是有趣模式记录,这些记录也是按用户的输入非精确单词升序排序,这样方便在进行记录查找时使用二分查找,快速的查询某一记录是否存在,在记录的内部是按照模式的有效次数降序按序的。 4 实施应用 开发环境 硬件平台 CPU: i54200h ; 内存: 256MB 及以上。 软件平台 操作 系统: Windows 虚拟机 VMware 下的 ubuntu linux。 开发工具: gcc ,vim 开发环境的搭建和配置 1. 安装 vim 在 linux终端输入 sudo aptget install vimgtk,然后输入 root 用户密码等待完成 vim 工具的安装 7 2. vim 的基本配置 在 linux终端输入 vi ~/.vimrc 按如下方式配置 set nu set ts=4 set sw=4 set cindent set autoident 3.环境变量的设置 在终端 输入 vi ~/.bashrc 添加以下行: export PATH=$PATH:./ 保存之后在命令行输入 source .bashrc 编写代码 int LCS(char* a,char* b) { int n,m,i,j。 int flag=0。 n=strlen(a)1。 m=strlen(b)1。 int L[100][100]={0}。 for(i=0。 i=n。 i++) { if(flag||(a[i]==b[0])) { L[i][0]=1。 flag=1。 } else L[i][0]=0。 } flag=0。 for(j=0。 j=m。 j++) { if(flag||(a[0]==b[j])) { L[0][j]=1。 flag=1。 } else L[0][j]=0。 } 8 //char a[100],b[100]。 for(i=1。 i=n。 i++) for(j=1。 j=m。 j++) { if (a[i]==b[j]) L[i][j]=L[i1][j1]+1。 else if (L[i][j1]=L[i1][j]) L[i][j]=L[i][j1]。 else L[i][j]=L[i1][j]。 } return L[n][m]。 } c 语言实现 ifndef _LEARN_H define _LEARN_H include include include include define MAXPRES 5//用户偏好的最大个数 define WORDLEN 24//单词最大长度 define PRENUM 5 //有效模式的个数 typedef struct{ char word[WORDLEN]。 //用户偏好 int count。 //次数 }Preference。 typedef struct{ char input[WORDLEN]。 //用户选择项 Preference pres[MAXPRES]。 //最多记录 5个偏好 }Record。 //int Recordsize=sizeof(Record)。 //一个记录的大小 void RecordData(char* word,Node* nodes)。 void NewRecord(char* word,char* match_word)。 void Analyse(char* word)。 void Solution(char* newData,Node* nodes)。 void Decision(Node* dst_node,Node* src_node)。 //用于快速查找查询记录或对记录快排 int Recordcmp(const void * dst,const void * src)。 int Prescmp(const void * dst,const void * src)。 endif 9 主要函数解 释: RecordData:用于记录用户每次输入的非精确单词及其使用 lcs模糊查询得到的结果集。 Analyse:分析用户的输入和 lcs模糊结果集间的关系,提取有趣模式。 NewRecord:记录有趣模式。 Solution:提取与用户输入的非精确单词相关的模式记录。 Decision:根据历史模式记录,生成最终的决策方案。 2. 在 void RecordData(char* word,Node* nodes) {//word 代表用户的输入, nodes是模糊查询的结果集 FILE* fd=fopen(./,w+b)。 //打开并清空上一次的结果 if(!fd) return。 int node_len=0。 int len=strlen(word)。 fwrite(amp。 len,sizeof(int),1,fd)。 fwrite(word,1,len,fd)。 while(strlen(nodes[node_len].word)0) node_len++。 fwrite(amp。 node_len,sizeof(int),1,fd)。 fwrite(nodes,sizeof(Node),node_len,fd)。 fclose(fd)。 } int Recordcmp(const void * dst,const void * src) { Record* d=(Record*)dst。 Record* s=(Record*)src。 return strcmp(dinput,sinput)。 } //对用户偏好按降序排序 int Prescmp(const void * dst,const void * src) { Preference* d=(Preference*)dst。 Preference* s=(Preference*)src。 return (dcount) (scount)。 } void NewRecord(char* word,char* match_word) { FILE* fd=fopen(./,a+b)。 if(!fd) return。 int RecordCount=0。 Record* matched=NULL。 10 char ch。 fseek(fd,0,SEEK_SET)。 fread(amp。 ch,1,1,fd)。 if(ch==EOF)//即初始状态,空文件 { RecordCount=1。 fseek(fd,0,SEEK_SET)。 fwrite(amp。 RecordCount,sizeof(int),1,fd)。 Record newRcd={0}。 strcpy(,word)。 strcpy([0].word,match_word)。 [0].count=1。 fwrite(amp。 newRcd,sizeof(Record),1,fd)。 //check the first record fclose(fd)。 return。 } else{ fseek(fd,0,SEEK_SET)。 fread(amp。 RecordCount,sizeof(int),1,fd)。 Record* records=(Record*)malloc((RecordCount+1)*Recordsize)。 fread(records,Recordsize,RecordCount,fd)。 fclose(fd)。 //a+模式从文件头读,从文件尾写 matched=(Record*)bsearch(word,records,RecordCount,Recordsize,Recordcmp)。 //是已有记录 if(matched!=NULL) { int num=0,i。 //用于标识是否找到 while(strlen(matchedpres[num].word)0) num++。 //计算当前用户偏好的数目 for(i=0。 inum。 i++) { if(!strcmp(match_word,matchedpres[i].word)) { matchedpres[i].count++。 qsort(matchedpres,num,sizeof(Preference),Prescmp)。 break。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。