基于机器学习的英汉字典模糊查询正文大学学位论文.docx

上传人:b****3 文档编号:5340987 上传时间:2022-12-15 格式:DOCX 页数:27 大小:98.21KB
下载 相关 举报
基于机器学习的英汉字典模糊查询正文大学学位论文.docx_第1页
第1页 / 共27页
基于机器学习的英汉字典模糊查询正文大学学位论文.docx_第2页
第2页 / 共27页
基于机器学习的英汉字典模糊查询正文大学学位论文.docx_第3页
第3页 / 共27页
基于机器学习的英汉字典模糊查询正文大学学位论文.docx_第4页
第4页 / 共27页
基于机器学习的英汉字典模糊查询正文大学学位论文.docx_第5页
第5页 / 共27页
点击查看更多>>
下载资源
资源描述

基于机器学习的英汉字典模糊查询正文大学学位论文.docx

《基于机器学习的英汉字典模糊查询正文大学学位论文.docx》由会员分享,可在线阅读,更多相关《基于机器学习的英汉字典模糊查询正文大学学位论文.docx(27页珍藏版)》请在冰豆网上搜索。

基于机器学习的英汉字典模糊查询正文大学学位论文.docx

基于机器学习的英汉字典模糊查询正文大学学位论文

○A基础理论

●B应用研究

○C调查报告

○D其他

 

本科生毕业设计(论文)

基于机器学习的英汉字典模糊查询

二级学院

信息科学与技术学院

专业

计算机科学与技术

年级

2010级

学号

2010344369

作者姓名

苏家辉

指导教师

蔡广基副教授

完成日期

2014年5月24日

 

基于机器学习的英汉字典模糊查询

 

专业名称:

计算机科学与技术

作者姓名:

苏家辉

指导教师:

蔡广基

 

论文答辩小组

组长:

蔡广基

成员:

王晓晔

关心

论文成绩:

 

目录

1引言2

1.1研究背景及其意义2

1.2研究内容和目标2

2研究与实现中的关键技术2

2.1机器学习的基本原理2

2.2有趣模式的提取2

2.3有趣模式集的优化3

2.4使用动态规划的最长公共子序列3

3系统设计4

3.1总体结构4

3.2业务流程设计4

3.3数据结构设计5

3.3.1宏定义5

3.3.2结构体5

3.3.3文件6

4实施应用6

4.1开发环境6

4.1.1硬件平台6

4.1.2软件平台6

4.2开发环境的搭建和配置6

4.3编写代码7

4.3.1最长公共子序列长度核心代码7

4.3.2机器学习模型的c语言实现8

5测试与分析14

5.1精确查询的实现14

5.2一般模糊查询的实现15

5.3基于动态规划的模糊查询实现16

5.4机器学习模型对于LCS模糊查询的优化16

5.5机器学习模型的自动优化17

6结论19

参考文献19

致谢19

基于机器学习的英汉字典模糊查询

作者苏家辉指导教师蔡广基副教授

(湛江师范学院信息科学与技术学院,湛江524048)

摘要:

本文研究机器学习的基本原理和实现方法,对一个使用动态规划实现的英汉字典模糊查询系统构建一个机器学习模型。

该模型实现了对用户的检索习惯进行分析,提取用户检索数据中的有趣模式,并通过统计频度对模式集进行自动优化,为用户的模糊查询提供智能化的查询结果。

关键词:

机器学习模型,动态规划,模糊查询

FuzzyqueryofanEnglish-Chinesedictionarybasedonmachinelearning

SuJiahui

Schoolofinformationscienceandtechnology,ZhanjiangNormalUniversity,Zhanjiang,524048China

Abstract:

Basedonthemachinelearningtheory,amodelofthefuzzyqueryofanEnglish-Chinesedictionarysystem,whichisfulfilledbythedynamicprogrammingalgorithmisgiven.Themodelanalysestheuser’sfuzzyquerydataandfindsouttheconnectionsbetweenthedata,recordingtheminingmodels,appliesthemtothefuzzyquerysetduringanon-accuratesearching,andautomaticallyimprovestheminingmodelssetaccordingtothestatisticsatfrequenciesofuser,providingintelligentsolutionsforthefuzzyquery.

Keywords:

Machinelearning;dynamicprogrammingalgorithm;fuzzyquery;

 

1引言

1.1研究背景及其意义

机器学习是现代人工智能研究、发展的重要领域,它通过研究计算机如何模拟或实现人类的学习行为,通过分析、归纳、综合建立人类学习过程的计算模型或认识模型,基于已有数据识别复杂模式,做出智能化的决策,并将其应用于实际问题中,为解决问题提供可行决策和方案支持[1]。

自1980年在卡内基梅隆大学召开第一届机器学习研讨会以来,机器学习的研究工作发展迅猛,已成为人工智能领域研究的中心课题之一。

随着机器学习的蓬勃发展,人们在工作中累积了大量可供测试算法的数据集或者超大数据集,机器学习工作者在此基础上可以进行更精准的研究。

目前机器学习已经广泛应用于智能搜索、数据分析等领域,如许多大型的搜索引擎网站的智能化的用户体验都是基于机器学习等研究成果实现的。

在大数据时代,机器学习研究将会得到更大的发展。

1.2研究内容和目标

研究机器学习模型的生成过程,构建机器学习的模型,将其应用到英汉字典模糊查询中。

第2节介绍机器学习和模糊查询中的基本思路和实现方法,第3节具体介绍算法实现的设计和数据的处理,第4节编码实现构想,第5节通过一些测试用例验证、完善算法的基本功能,最后一节对本研究做出总结并提出新展望。

2研究与实现中的关键技术

2.1机器学习的基本原理

机器学习是从已有或动态的数据中提取有用的新知识[2],并将其应用到问题的决策中,其基本过程为:

1.收集学习材料,即获取的数据;

2.分析数据,从中提取有趣的模式;

3.基于数据分析获取有趣的模式,生成知识库,制定决策;

4.通过学习新知识检验知识库数据的有效性,修改、完善知识库。

在步骤1中获取的知识是原始的数据或材料,他们看起来可能是杂乱无章的,因此在步骤2需要对数据进行分析,挖掘复杂的隐藏的模式,使用朴素的贝叶斯分类、噪声处理等方法对数据进行分离、提取,然后在将来的决策(步骤3)中使用这些模式去提供方案。

但是提取出来的模式也可能是无效的,这就需要步骤4不断地学习新的知识,判定模式是否有效,修改完善知识库。

2.2有趣模式的提取

如何从原始数据中提取有用的模式,挖掘那些隐藏的有趣知识?

分类是数据分析的一种重要的形式,通过它可以提取重要的数据类型。

分类首先要基于现有数据建立一个分类模型,然后根据模型对数据进行分类。

分类模型有决策树分类器、贝叶斯分类器和基于规则的分类器等[3]。

在英汉字典模糊查询系统,使用的是基于规则的分类器--形如IF-THEN的分类器。

规则的IF部分是前提条件,THEN部分是结论。

假如用户的某些输入满足特定的条件则可认为是有趣模式。

一般情况下,如果用户本次输入的数据在上一次模糊查询的结果集中,则可认为上一次为用户提供的结果集中的对应项是有趣的。

如果不满足这一条件则可认为上一次的模糊结果集对用户没有帮助,即为无效数据,丢弃之。

英汉字典模糊查询系统的规则分类器实现大体如下:

本次是否为精确查询?

YESNO

上一次是否有模糊结果集?

非有趣模式

YESNO

本次输入在上一次模糊结果集中?

非有趣模式

YESNO

有趣模式非有趣模式

图2.1规则分类器的实现

2.3有趣模式集的优化

有趣模式集中的记录都是用户感兴趣的,但是对于一个非精确的输入可能存在多个用户感兴趣的选择项,如何确定最优的选择项呢?

在统计学上,使用概率表示一件事情在大量测试下发生的可能性[4]。

假设A代表用户的一个模糊输入,X1,…,Xi代表A输入所对应的用户感兴趣的选择项,设p(A|Xi)为用户输入A后选择Xi的概率,分别计每一个选择项Xi的p(A|Xi),将具有最大值的选择项排在最前面,即为最优的选择项。

用户每次输入A后选择Xi都是对A—Xi模式的一次强化。

p(A|Xi)=n(Xi)/n(A),在该式中n(Xi)表示Xi被选择的次数,n(A)表示输入A的总次数,对于计算A的所有选择项的p(A|Xi),分母都是相同的,因此在具体的实现中,只需要为每一个选择项项添加一个频度计数,这样具有最大频度计数的选择项即为最优的选择项。

2.4使用动态规划的最长公共子序列

动态规划[5]采用自底向上的递推求值,把中间的结果存储起来并用于后面的计算,对于改善蛮力搜索的时间复杂度是比较有效的,假设a[n],b[m]分别表示长度为n,m的两个字符串,则a[0],…,a[n-1]中的任意组合表示a的子序列,b[0]…b[m-1中的任意组合表示b的子序列,如果要求这两个字符串的最长公共子序列,采用简单的线性规划的方法是:

列举a的所有所有2的n次方个子序列,察看它与b[m]的最长公共子序列长度,采用这种方法的时间复杂度是指数级的Ο(n^2),如果采用动态规划的方法可以使解决最初公共子序列问题优化到Ο(nlogn)。

假设L[n][m]表示a的前n个字符与b的前m个字符之间的最长公共子序列长度,则L[n][m]的递推公式如下:

LCSflag初始值为0,用于标记当n或m为0时,前面是否有a的子序列与b的子序列相等的情况。

对于n=0或m=0,若a[n]=a[m],则L[n][m]=LCSflag=1,如果a[n]!

=a[m],若LCSflag=1则,L[n][m]=1,否则L[n][m]=0;

对于n和m都不等于0的情况:

若a[n]=b[m]则L[n][m]=L[n-1][m-1]+1;若a[n]!

=b[m]则L[n][m]={L[n-1][m]和L[n][m-1]中的最大值}。

3系统设计

3.1总体结构

系统的主要功能包括以下部分

1.用户输入

接收用户输入的单词或词组,它们可能是精确的输入,也可能是存在拼写错误的单词或词组,如“department”和“deparmen”等。

2.精确查询

在字典的索引文件中查找查看是否存在,如果存在,则去词库的译义文件中读取,并将结果输出给用户。

3.一般模糊查询

如果通过精确查找无法查出该单词/词组,这种可能是由于单词的单复数,动词过去式,现在分词的ing形式类等造成,因此一般模糊查询就是对以上形式的单词进行简单的处理,如去掉词尾的‘s’、‘d’等,然后再对处理之后的单词进行精确查询。

4.基于最长公共子序列的模糊查询(以下简称lcs查询)

如果基于一般模糊查询仍无法查出,则使用lcs查询,该查询是基于全文的检索,找出与输入单词最为相近的单词,即与输入单词的最长公共子序列是在全文中的最大值的单词,并将其作为选择项输出给用户。

5.机器学习的模块

开始时候,用户的使用记录为空。

在一次lcs查询之后,可以将lcs模糊查询的结果集记录起来,如果用户下一次查询的输入与lcs模糊查询的结果集记录有匹配项,则认为它们是一个有趣模式,并把其加入到有趣模式集中。

每一次模糊查询给用户输出的结果集都会与模式结果集中的结果进行匹配,如果找到,则把模式结果集中的匹配数据与模糊结果集,匹配数据优先放到结果集前,去除重复的项,生成最终结果集(决策),最后输出给用户。

3.2业务流程设计

系统的业务流程如下:

图3.1业务流程图

3.3数据结构设计

3.3.1宏定义

宏定义

含义

#defineWORDCOUNT59372

词库中单词的个数

#defineWORDLEN24

单词的最大长度

#defineError(msg){perror(msg);eXit

(1);}

出错处理

#definePRENUM5

对于每个用户输入可以提取的有效模式的最大个数

3.3.2结构体

1.单词索引记录

typedefstruct{

charword[WORDLEN];

intoffset;

intlength;

}Node;

其中word表示单词,offset是该单词在词库文件中的索引,length是该单词的释义的长度

2.用户的偏好记录

typedefstruct{

charword[WORDLEN];

intcount;

}Preference;

其中word表示用户偏好的单词,count是该单词的的支持度计数,即在用户的输入中该单词被选中的频数。

3.模式记录集

typedefstruct{

charinput[WORDLEN];//用户输入的单词

Preferencepres[MAXPRES];//最多记录5个偏好

}Record;

其中input是用户的非精确单词,pres是该单词对应的用户偏好单词数组,最多5个记录。

3.3.3文件

1.单词的索引文件star.ndx

存放的是一个个Node类型的数据,每个单词/词组都有一个对应的Node,这些数据按照单词的英文次序升序排列,因此在查找单词时可使用二分查找快速检索。

2.词库文件star.dict

存放单词的释义

3.用户输入记录文件search.dat

存放用户输入的非精确单词,及该单词对应的lcs模糊查询结果集

4.模式记录文件record.dat

存放的是有趣模式记录,这些记录也是按用户的输入非精确单词升序排序,这样方便在进行记录查找时使用二分查找,快速的查询某一记录是否存在,在记录的内部是按照模式的有效次数降序按序的。

4实施应用

4.1开发环境

4.1.1硬件平台

CPU:

i5-4200h2.8GHz;

内存:

256MB及以上。

4.1.2软件平台

操作系统:

Windows虚拟机VMware10.0下的ubuntulinux。

开发工具:

gcc,vim

4.2开发环境的搭建和配置

1.安装vim

在linux终端输入 sudoapt-getinstallvim-gtk,然后输入root用户密码等待完成vim工具的安装

2.vim的基本配置

在linux终端输入vi~/.vimrc按如下方式配置

setnu

setts=4

setsw=4

setcindent

setautoident

3.环境变量的设置

在终端输入vi~/.bashrc

添加以下行:

exportPATH="$PATH:

./"

保存之后在命令行输入source.bashrc

4.3编写代码

4.3.1最长公共子序列长度核心代码

intLCS(char*a,char*b)

{

intn,m,i,j;

intflag=0;

n=strlen(a)-1;

m=strlen(b)-1;

intL[100][100]={0};

for(i=0;i<=n;i++)

{

if(flag||(a[i]==b[0]))

{

L[i][0]=1;

flag=1;

}

elseL[i][0]=0;

}

flag=0;

for(j=0;j<=m;j++)

{

if(flag||(a[0]==b[j]))

{

L[0][j]=1;

flag=1;

}

elseL[0][j]=0;

}

//chara[100],b[100];

for(i=1;i<=n;i++)

for(j=1;j<=m;j++)

{

if(a[i]==b[j])

L[i][j]=L[i-1][j-1]+1;

elseif(L[i][j-1]>=L[i-1][j])

L[i][j]=L[i][j-1];

else

L[i][j]=L[i-1][j];

}

returnL[n][m];

}

4.3.2机器学习模型的c语言实现

1.在learn.h中的定义

#ifndef_LEARN_H

#define_LEARN_H

#include"dict.h"

#include

#include

#include

#defineMAXPRES5//用户偏好的最大个数

#defineWORDLEN24//单词最大长度

#definePRENUM5//有效模式的个数

typedefstruct{

charword[WORDLEN];//用户偏好

intcount;//次数

}Preference;

typedefstruct{

charinput[WORDLEN];//用户选择项

Preferencepres[MAXPRES];//最多记录5个偏好

}Record;

//intRecordsize=sizeof(Record);//一个记录的大小

voidRecordData(char*word,Node*nodes);

voidNewRecord(char*word,char*match_word);

voidAnalyse(char*word);

voidSolution(char*newData,Node*nodes);

voidDecision(Node*dst_node,Node*src_node);

//用于快速查找查询记录或对记录快排

intRecordcmp(constvoid*dst,constvoid*src);

intPrescmp(constvoid*dst,constvoid*src);

#endif

主要函数解释:

RecordData:

用于记录用户每次输入的非精确单词及其使用lcs模糊查询得到的结果集。

Analyse:

分析用户的输入和lcs模糊结果集间的关系,提取有趣模式。

NewRecord:

记录有趣模式。

Solution:

提取与用户输入的非精确单词相关的模式记录。

Decision:

根据历史模式记录,生成最终的决策方案。

2.在learn.c中主要函数的实现

voidRecordData(char*word,Node*nodes)

{//word代表用户的输入,nodes是模糊查询的结果集

FILE*fd=fopen("./search.dat","w+b");//打开并清空上一次的结果

if(!

fd)

return;

intnode_len=0;

intlen=strlen(word);

fwrite(&len,sizeof(int),1,fd);

fwrite(word,1,len,fd);

while(strlen(nodes[node_len].word)>0)

node_len++;

fwrite(&node_len,sizeof(int),1,fd);

fwrite(nodes,sizeof(Node),node_len,fd);

fclose(fd);

}

intRecordcmp(constvoid*dst,constvoid*src)

{

Record*d=(Record*)dst;

Record*s=(Record*)src;

returnstrcmp(d->input,s->input);

}

//对用户偏好按降序排序

intPrescmp(constvoid*dst,constvoid*src)

{

Preference*d=(Preference*)dst;

Preference*s=(Preference*)src;

return(d->count)<(s->count);

}

voidNewRecord(char*word,char*match_word)

{

FILE*fd=fopen("./record.dat","a+b");

if(!

fd)

return;

intRecordCount=0;;

Record*matched=NULL;

charch;

fseek(fd,0,SEEK_SET);

fread(&ch,1,1,fd);

if(ch==EOF)//即初始状态,空文件

{

RecordCount=1;

fseek(fd,0,SEEK_SET);

fwrite(&RecordCount,sizeof(int),1,fd);

RecordnewRcd={0};

strcpy(newRcd.input,word);

strcpy(newRcd.pres[0].word,match_word);

newRcd.pres[0].count=1;

fwrite(&newRcd,sizeof(Record),1,fd);

//checkthefirstrecord

fclose(fd);

return;

}

else{

fseek(fd,0,SEEK_SET);

fread(&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)

{

intnum=0,i;//用于标识是否找到

while(strlen(matched->pres[num].word)>0)

num++;//计算当前用户偏好的数目

for(i=0;i

{

if(!

strcmp(match_word,matched->pres[i].word))

{

matched->pres[i].count++;

qsort(matched->pres,num,sizeof(Preference),Prescmp);

break;

}

}

if(!

(i

{

PreferencenewPre={0};

strcpy(newPre.word,match_word);

newPre.count=1;

if(i

matched->pres[i]=newPre;

elsematched->pres[i-1]=newPre;

}

}

//新记录

else{

RecordCount++;

RecordnewRcd={0};

strcpy(newRcd.input,word);

strcpy(newRcd.pres[0].word,match_word);

newRcd.pres[0].

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 总结汇报 > 工作总结汇报

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1