《中文分词说明书-学位论文.doc》由会员分享,可在线阅读,更多相关《中文分词说明书-学位论文.doc(33页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、 学校代码: 10128学 号:040201110 本科毕业设计说明书(题 目:中文分词在搜索引擎中的分词算法的研究与应用学生姓名:张辉学 院:信息工程学院系 别:计算机系专 业:计算机科学与技术班 级:计算机04-2指导教师:马志强 讲师 钱庭荣 工程师二 八 年 六 月内蒙古工业大学本科毕业设计说明书摘 要随着信息的飞速增长,搜索引擎成为了人们查找信息的首选工具,在查询信息过程中,查询内容既包括西文也包括中文,中文与西文不同,西方文字(如英文)的单词间有空格作为分隔,计算机很容易把词分开。而在中文句子里,词和词之间没有明显的分隔符,要把中文句子拆分成词就需要使用中文分词技术。本设计主要是研
2、究中文分词算法,在计算机专业搜索系统进行应用。系统中的中文分词算法采用机械分词算法,通过和词典的比较,进行把中文词语拆分。搜索引擎不是对整个查询内容进行匹配查询,而是划分成关键词进行查询。本系统中设计的中文分词算法,主要是采用最大正向分词算法把两字以上的词语拆分出来。这样既可以提高分词的速度,又可以提高搜索的速度和效率。该系统以Java技术为基础,涉及到相关的Struts、Hibernate、JSP等技术。本系统具有良好的可读性、可操作性、可维性、可扩展性和可移植性。关键词:中文分词;词典;搜索引擎AbstractWith the information rapid growth, the s
3、earch engine became the people to search the information the first choice tool, in the polling message process, the inquiry content already included the western languages also to include Chinese, Chinese and the western languages is different, Western writing (for example English) between the word h
4、ad the blank space achievement to separate, the computer was very easy the word to separate. But in Chinese sentence, between the word and the word the obvious separating character, cannot analyze Chinese sentence to use Chinese word segmentation technology. This design mainly studies Chinese word s
5、egmentation algorithm, carries on the application in the computer specialized search system. In systems Chinese word segmentation algorithm uses the mechanical participle algorithm, through with the lexicon comparison, carries on Chinese words and expressions resolution.The search engine is not carr
6、ies on the match to entire inquiry content to inquire, but is divides the key word to carry on the inquiry. In this system designs Chinese word segmentation algorithm, are mainly uses most Taisho to analyze to the participle algorithm two characters above words and expressions? Like this both may en
7、hance the participle the speed, and may enhance the search the speed and the efficiency. This system take the Java technology as a foundation, involves to related technologies and so on Struts, Hibernate, JSP. This system has the good readability, the feasibility, to be possible Unger, the extendibi
8、lity and the probability.Key words: Chinese word segmentation; Lexicon; Search engine目 录引 言1第一章 技术概述21.1 Java概述21.2 Hibernate概述21.3 Struts概述21.4 JSP概述3第二章 系统分析42.1 系统功能分析42.1.1 系统功能框图42.1.2 系统功能介绍42.2 数据库分析52.3 系统用例图52.4 系统开发环境6第三章 系统总体设计83.1 系统设计目的83.2 开发设计思想83.3 系统数据库设计83.4 系统模块设计9第四章 系统详细设计104.1
9、信息搜索的设计104.1.1 中文分词104.1.2 计算机专业搜索114.2 用户管理的设计134.2.1 用户注册的设计134.2.2 用户登录的设计144.2.3 修改用户信息的设计164.2.4 忘记密码的设计18第五章 系统测试205.1 系统测试的目的和原则205.2 系统测试的方法205.3 本系统的测试20结 论26参考文献27谢 辞28内蒙古工业大学本科毕业设计说明书引 言中文分词技术的研究,已经有几十年的历史了,在20世纪80年代,就有人开始研究如何用计算机来自动分词。中文分词技术属于自然语言处理技术范畴,对于一句话,人们可以通过自己的知识来划分哪些是词,哪些不是词。但如何
10、让计算机识别那些是词,那些不是词?其处理过程就是分词算法。目前中文分词算法主要分为以下三种:基于字符串匹配算法(机械分词算法),基于理解的分词算法和基于统计的分词算法。在分词过程中,还存在两大难题。一个是歧义识别,一个是新词识别。歧义是指同样的一句话,可能有两种或者更多的切分方法。新词,专业术语称为未登录词。也就是那些在字典中都没有收录过,但又确实能称为词的那些词语。本课题主要研究的是中文分词在搜索引擎中的分词算法。分词准确性对搜索引擎来说十分重要,但如果分词速度太慢,即使准确性再高,对于搜索引擎来说也是不可用的。因为搜索引擎需要处理数以亿计的网页,假如分词占用的时间过长,会严重影响搜索引擎内
11、容更新的速度。因此对于搜索引擎来说,分词的准确性和速度,二者都需要达到很高的要求。第一章 技术概述本设计中所用到的技术包括Java、Hibernate、Struts和JSP等。下面简单的介绍下这些技术。1.1 Java概述Java是一种简单易用、完全面向对象、具有平台无关性且安全可靠的主要面向Internet的开发工具。自从1995年正式问世以来,Java的快速发展已经让整个Web世界发生了翻天覆地的变化。在早期,Java比较多的用在浏览器上,插入到网页中(即是Java Applet程序),成为最灵活、最强大的网页多媒体的载体,但由于Java虚拟机相对于个人电脑而言,有占用资源大,安全性相对较
12、差等缺点,Applet逐渐的被后起之秀Flash所替代,但随着Java Servlet的推出,Java在电子商务方面开始崭露头角,最新的JSP(Java Server Page)技术的推出,更是让Java成为基于Web的应用程序的首选开发工具,目前的Java技术已成为所有大型电子商务项目的必然选择。1.2 Hibernate概述Hibernate是JDBC(Java Database Connectivity)的轻量级的对象封装。它是一个独立的对象持久层框架,和App Server,以及EJB(Enterprise Java Beans)没有什么必然的联系。Hibernate可以用在任何JDB
13、C可以使用的场合,例如Java应用程序的数据库访问代码,DAO接口的实现类,甚至可以是BMP(Bitmap)里面的访问数据库的代码。从这个意义上来说,Hibernate和EJB不是一个范畴的东西,也不存在非此即彼的关系。Hibernate是一个和JDBC密切关联的框架,所以Hibernate的兼容性和JDBC驱动,和数据库都有一定的关系,但是和使用它的Java程序,和App Server没有任何关系,也不存在兼容性问题。1.3 Struts概述Struts这个名字来源于建筑和旧式飞机中使用的支持金属架。它的目的是为了减少在运用MVC(Model View Controller)模型来开发Web
14、应用的时间。Struts 是一个基于模型(Model)、视图(View)和控制器(Controller)模式的应用架构的开源框架。MVC即Model-View-Controller的缩写,是一种常用的设计模式。MVC减弱了业务逻辑接口和数据接口之间的耦合,以及让视图层更富于变化。Struts是MVC的一种实现,它将Servlet和JSP标记(属于J2EE规范)用作实现的一部分。Struts继承了MVC的各项特性,并根据J2EE的特点,做了相应的变化与扩展。Struts跟Tomcat、Turbine等诸多Apache项目一样,是开源软件,这是它的一大优点,使开发者能更深入的了解其内部实现机制。除
15、此之外,Struts的优点主要集中体现在两个方面:Taglib和页面导航。1.4 JSP概述JSP(Java Server Pages)技术提供了一种简单快速的方法来创建显示动态生成内容的Web页面。由业界处于领先地位的Sun公司制定了相关的JSP技术规范,该规范定义了如何在服务器和JSP页面间进行交互,还描述了页面的格式和语法。JSP技术是行业协作的结果,它的设计是开放的,符合行业标准的,并支持绝大多数的服务器、浏览器和相关工具。由于使用可重用的组件和标签取代了对页面本身脚本语言的严重依赖,JSP技术大大加快了开发的速度。所有JSP的实现均支持以Java编程语言为基础的脚本语言,它有与生俱来
16、的可适应性,支持复杂的操作。JSP的优点有:对用户界面的更新,其实就是由Web Server进行的,所以给人的感觉更新很快;所有的应用都是基于服务器的,所以他们可以时刻保持最新版本;客户端的借口不是很繁琐,对于各种应用易于部署、维护和修改。第二章 系统分析2.1 系统功能分析2.1.1 系统功能框图计算机专业搜索系统的功能框图如图2-1所示计算机专业搜索系统搜索管理用户管理用户登录信息修改用户注册搜索中心图2-1 功能框图2.1.2 系统功能介绍(1)信息搜索功能1)中文分词这块是本设计的主要内容,用来把中文句子拆分成一个一个的词语。2)计算机专业搜索在这里输入查询条件后进行搜索。这里只能查询
17、计算机相关方面的内容。(2)用户管理功能1)用户注册对页面中的详细信息填写后,提交到服务器,然后将结果保存到数据库中。2)用户登录填写好登录用户名和密码后,提交到数据库进行查询,当用户名和密码正确后,转到acticity.jsp页面。3)忘记密码当用户忘记密码的时候,可以到忘记密码通过填写用户名、密码问题和密码答案,和数据库中的数据进行比较,全部正确会返回一个新的密码。4)修改用户信息当用户想要修改自己的信息时,可以到此页面进行修改。2.2 数据库分析数据库设计的任务是确定系统所需的数据库。数据库是表的集合,通常一个系统只需一个数据库。本系统主要用了两张表,一张是用来存放用户信息的SCAN_M
18、EMBERINFO表,在进行用户管理时,会使用此表的内容;另一张是用来存放大量的搜索内容的SCAN_DETAILS表,在进行搜索时,会操作此表。2.3 系统用例图(1)用户注册用例图 这部分是用户在一开始使用此系统时要进行注册会员,通过注册的会员号才能进入系统进行搜索。用户注册用例图如图2-2所示。图2-2 用户注册用例图(2)忘记密码用例图 这部分实现的是会员当忘记密码时,可以通过这里进行找回密码,这里找回的密码是系统新设定的密码。忘记密码用例图如图2-3所示。(3)用户登录用例图 这部分实现的是用户在注册上会员号后,通过会员号登录到系统内部,这样才能进行计算机专业搜索。用户登录用例图如图2
19、-4所示。图2-3 忘记密码用例图图2-4 用户登录用例图(4)系统核心用例图搜索中心提供中文信息搜索。个人基本信息是用来显示会员的基本信息。管理基本信息主要是进行会员信息修改。系统核心用例图如图2-5所示。图2-5系统核心用例图2.4 系统开发环境(1)硬件环境设计本系统时,要求的硬件环境如表2-1所示表2-1 硬件环境表内存1GCPUInter(R) Celeron (R) CPU 2.80GH(2)软件环境设计本系统时,要求的软件环境如表2-2所示表2-2 软件环境表操作系统Linux开发工具及相关技术MyEclipse、Java、Hibernate、Struts第三章 系统总体设计3.
20、1 系统设计目的在搜索中文句子时,和搜索英文句子不一样。英文中的每个词之间都是用空格隔开。而中文句子是以字为单位,词与词没有明确的分隔符,这样就需要一种用来划分中文词语的算法。本系统主要是设计在搜索引擎中的中文分词算法,通过这个算法来对中文句子进行拆分,然后用拆分出的词语进行中文的搜索。3.2 开发设计思想本系统主要是实现中文分词算法,通过中文分词算法进行中文搜索。本系统在中文分词算法设计的过程中,主要采用了机械分词,把句子中的字组成词,然后和词典每行的词进行比较,如果相同就把这个词保存到List集合中。这样把一句话分成以词为单位,通过这些词进行搜索。这里用到了词典,词典中存放词语的方式是一行
21、一个词语,这样可以在程序中通过取词典中每一行的内容,把每个词取出并存放在List集合中。然后在程序中通过List中的内容和拆分的词进行比较。3.3 系统数据库设计本系统的数据库比较简单,主要使用了两张表,一张是用来存放用户信息的SCAN_MEMBERINFO表,如表3-1所示;另一张是用来存放大量的搜索内容的SCAN_DETAILS表,如表3-2所示。表3-1 用户信息表SCAN_MEMBERINFO表字段名类型描述标识idNumber主键唯一标识nicknameVarchar2非空,唯一用户名passwordVarchar2非空密码genderVarchar2非空性别ageNumber非空年
22、龄emailVarchar2非空邮箱addressVarchar2无地址phoneVarchar2无电话passwordquestionVarchar2无密码问题passwordanswerVarchar2无密码答案registerdateDate无注册时间latestdateDate无最后登录时间表3-2 信息内容表SCAN_DETAILS表字段名类型描述标识idNumber主键唯一标识nameVarchar2非空,唯一标题remarkVarchar2无内容3.4 系统模块设计(1)表示层设计系统的外部视图。这里用JSP进行设计,把设计好的JSP页面全部根据功能的划分放到pages文件中。(
23、2)业务逻辑层处理外部视图的命令和设计中文分词算法来实现中文搜索。WEB包中的Action和Form是用来实现JSP页面和业务逻辑进行连接,Service包中主要实现了业务逻辑。(3)持久化层连接数据库和处理业务逻辑层与数据库层的功能实现。这里主要采用Hibernate进行与数据库连接和交互的,DAO包中的代码就是用来实现这些交互的。(4)数据库层创建数据库。这个系统采用Oracle 10g数据库。第四章 系统详细设计4.1 信息搜索的设计4.1.1 中文分词此模块主要是对中文句子进行拆分,然后以词为单位进行搜索。(1) 中文分词的流程图,如图4-1所示。图4-1 中文分词流程图(2)中文分词
24、算法描述词典,用来保存中文词语的文件,在进行中文分词时,与拆分出的词进行比较。本词典设计比较简单,词典中的词语以每行一个词的形式存放。在提取词典中的词语时,用了BufferedReader来把word.txt词典中每一行的词语写到内存中。使用存放在内存中的computerscan.jsp页面搜索信息和从词典里提取的词语进行比较,如果比较后结果相同保存到内存中。减少一个字,再与词典中的各行词比较,结果相同保存到内容中。重复执行上面流程,直到这句话再无词语可拆分为止。最后处理这些结果,把两字以上的词保存到集合中返回。(3)核心代码/1调用IFindDao接口IFindDao ifd = new F
25、indDaoImpl();List l = new ArrayList();/2 运用IFindDao接口中的findWord()方法提取词典中的词语l = ifd.findWord(/home/briup/Desktop/demon/demon/demon/src/com/briup/scan/common/word.txt);/3 判断字符串长度是否为List list = new ArrayList();if (str.length() = 1) list.add(str); 4.1.2 计算机专业搜索此模块主要实现搜索功能。(1)计算机专业搜索流程图,如图4-2所示。(2)搜索算法描述
26、搜索功能的实现,在ScanComputerAction中把computerscan.jsp页面的搜索信息存到内存中,然后调用IParticipleService接口中的participle()方法先进行分词,然后把结果返回。再对表中所有计算机专业信息进行查询,对其中的标题再进行分词,然后和之前返回的进行比较,如果分出的关键词相同,就将这条内容和关键词一起保存到对象中。不相同就继续上次操作,直到全部结束。最后在页面上把关键词和标题显示出来。在点击标题时,可以再弹出个view.jsp页面来显示这个标题下的计算机专业内容。图4-2 计算机专业搜索流程图(3)核心代码List endList=new
27、ArrayList();/1调用IParticipleService接口IParticipleService service=(IParticipleService)BeanFactory.getBean(participleService);for(String str:list)for(Det det:detList)List sList=new ArrayList();sList=service.leachWord(service.participle(det.getName();for(String s:sList)Enddet endDet=new Enddet();/2和数据库中的
28、信息进行比较,内容相同的保存到内存中if(str.equals(s)endDet.setAkey(str);endDet.setName(det.getName();endDet.setRemark(det.getRemark();endDet.setDetID(det.getId();endList.add(endDet);4.2 用户管理的设计4.2.1 用户注册的设计此模块主要是实现创建一个新的用户,将用户内容保存到用户表中。(1)用户注册流程图,如图4-3所示。图4-3 用户注册流程图(2)注册算法描述首先是把register.jsp页面上的内容通过RegisterForm将页面上的用
29、户的信息记录到RegisterAction 上。在RegisterAction中实现用户是否已经存在,这里需要调用IMemberservice接口中的findMemberinfoBynickname()方法来查找用户。还要比较页面上的两次密码是否正确,验证码是否正确,然后调用IMemberService接口中的register()方法来实现注册业务。而在IMemberService接口的register()方法中又要调用IMemberDao接口的saveOrUpdateMemberinfo()方法把数据保存到数据库中。(3)核心代码public void register(Memberinfo
30、 info) throws MemberServiceException HibernateTransaction tran=new HibernateTransaction();IMemberDao dao=(IMemberDao) BeanFactory.getBean(memberDao);trytran.beginTransaction();/1判断注册的用户是否已经存在Memberinfo member=dao.findMemberBynickname(info.getNickname();if(member!=null)throw new MemberServiceExceptio
31、n(昵称已经存在);/保存新注册的会员dao.saveOrUpdateMemberinfo(info);mit();catch(Exception e)tran.rollback();e.printStackTrace();throw new MemberServiceException(e.getMessage();4.2.2 用户登录的设计此模块主要是实现用户登录系统的功能。(1)用户登录流程图,如图4-4所示。图4-4 用户登录流程图(2)登录算法描述在loginAction中通过LoginForm把login.jsp页面上的用户名和密码调入调用IMemberService接口中logi
32、n()方法来实现登录业务,在login()方法中先查找用户是否存在,如果存在把用户信息取出存到Memberinfo对象中,再把页面上的密码与对象中的密码进行比较,相同就进入系统,进入系统后把查到的用户信息部分显示到rightframe.jsp页面上。错误就返回到登录页面。(3)核心代码Memberinfo info=new Memberinfo();IMemberDao dao=(IMemberDao) BeanFactory.getBean(memberDao);HibernateTransaction tran=new HibernateTransaction();/1查看登录的用户名是否
33、存在info=dao.findMemberBynickname(loginname);if(info=null)throw new MemberServiceException(用户不存在);/2查看密码是否正确if(!password.equals(info.getPassword()throw new MemberServiceException(密码错误);/3将latestDate设成当前时间,/并需要把上次登陆的时间保存到memberinfo的另外一个实例变量中。info.setLastLogindate(info.getLatestdate();info.setLatestdate
34、(new Date(System.currentTimeMillis();dao.saveOrUpdateMemberinfo(info);4.2.3 修改用户信息的设计此模块主要是实现用户对自己信息的修改。(1)修改用户信息流程图,如图4-5所示。图4-5 修改用户信息流程图(2)用户信息修改算法描述把modify.jsp页面上的信息通过UpdateForm传到UpdateAction中,先对旧密码进行比较,如果正确再将两次新密码比较,如果两次密码一致,就把页面上的信息封装到Memberinfo对象中。调用IMemberService接口中的modifyMemberinfo()方法来实现修改
35、,最后调用IMemberDao接口中的saveOrUpdateMemberinfo()方法把修改信息保存到数据库中。(3)核心代码UpdateForm updateForm=(UpdateForm) form;HttpSession session=request.getSession();IMemberService service =(IMemberService) BeanFactory.getBean(memberService);Memberinfo member=(Memberinfo) session.getAttribute(info);/1判断旧密码是否正确if(!membe
36、r.getPassword().equals(MD5.getMD5Str(updateForm.getOldPasswd()session.setAttribute(message, 旧密码错误);return mapping.findForward(updatememberinfo);/2判断两次新密码是否一致if(!MD5.getMD5Str(updateForm.getNewPasswd().equals(MD5.getMD5Str(updateForm.getNewPasswdre()session.setAttribute(message, 两次密码错误);return mappin
37、g.findForward(updatememberinfo);/3更新数据库中用户信息member.setPassword(MD5.getMD5Str(updateForm.getNewPasswd();member.setEmail(updateForm.getEmail();member.setPasswordquestion(updateForm.getPasswdQuestion();member.setPasswordanswer(updateForm.getPasswdAnswer();member.setGender(updateForm.getGender();member.
38、setPhone(updateForm.getPhone();member.setAddress(updateForm.getAddress();service.modifyMemberinfo(member);4.2.4 忘记密码的设计此模块主要实现用户在忘记密码时找回密码。(1)忘记密码流程图,如图4-6所示。图4-6 忘记密码流程图(2)忘记密码算法描述把passwd_missing.jsp页面上的用户名、密码问题和密码答案传到PasswdMissAction上,根据用户名查找用户是否存在,如果存在再判断密码问题和密码答案是否和数据库中的一样,一样就自动生成一个新的密码,返回到页面上。(
39、3)核心代码HibernateTransaction tran=new HibernateTransaction();IMemberDao dao=(IMemberDao) BeanFactory.getBean(memberDao);Memberinfo info=null;info=dao.findMemberBynickname(loginname);/1判断用户是否存在if(info= null)return null;/2判断密码问题是否正确if(!question.equals(info.getPasswordquestion()return null;/3判断密码答案是否正确if
40、(!answer.equals(info.getPasswordanswer()return null;return info.getPassword();第五章 系统测试5.1 系统测试的目的和原则在开发大型软件系统的过程中,需要面对错综复杂的问题,因此,在软件生存周期的每个阶段都不可避免地会产生错误。力求在每个阶段结束之前通过严格的技术审查,尽可能早的发现并纠正错误。测试的目的就是在软件投入生产性运行之前,尽可能多地发现软件中的错误。目前软件测试仍然是保证软件质量的关键步骤,它是对软件规格说明、设计和编码的最后复审。尽管面向对象技术的基本思想保证了软件应该有更高的质量,但无论采用什么样的编
41、程技术,编程人员的错误都是不可避免的,而且由于面向对象技术开发的软件代码重用率高,更需要严格测试,避免错误的繁衍。因此,软件测试在面向对象编程里更具有它的重要性。5.2 系统测试的方法测试的方法分为白盒法和黑盒法。(1)黑盒法如果已经知道了软件应该具有的功能,可以通过测试来检验是否每个功能都能正常使用,把它称为黑盒测试。对于软件测试而言,黑盒测试是把程序看成一个黑盒子,完全不考虑程序内部结构和处理过程。也就是说,黑盒测试是在程序接口进行的测试,它只检查程序功能是否能按照规格说明的规定正常的使用,程序是否能够适当的接收输入数据产生正确的输出信息,黑盒测试又称为功能测试。(2)白盒法与黑盒测试相反
42、,白盒测试是可以把程序看成装在一个透明的白盒子里,也就是完全了解程序的结构和处理过程。这种方法按照程序内部的逻辑测试程序,检验程序中的每条通路是否都能按预定要求正确工作。白盒测试又称为结构测试。5.3 本系统的测试这里是测试系统的最后结果,对本系统的测试采用了黑盒法测试。(1) 用户注册,界面如图5-1所示图5-1 注册界面 图6-2 注册成功页面注册成功,出现注册成功,如图5-2所示图5-2 注册成功界面(2)用户登录,界面如图5-3所示图5-3 登录界面登录成功,进入个人基本信息界面,如图5-4所示图5-4 个人基本信息界面(3)搜索中心,界面如图5-5所示图5-5 搜索界面搜索成功,在界
43、面上显示相关信息,如图5-6所示图5-6 搜索成功显示界面显示主题内容,如图5-7所示图5-7 显示主题内容界面(4)修改用户信息,界面如图5-8所示图5-8 修改用户信息界面修改成功,出现修改成功界面,如图5-9所示图5-9 修改成功界面(6)忘记密码,界面如图5-10所示图5-10 忘记密码界面成功后的结果,在界面上显示新密码,如图5-11所示图5-11 显示新密码界面结 论通过对中文分词算法的研究,并进行具体的应用,实现了一个计算机专业中文搜索系统。该系统采用Java技术,具有搜索中文信息的功能。加入中文分词算法后,提高了搜索结果的准确率。本系统的主要特色是搜索的内容只能是计算机相关内容。现有的大多数搜索系统都是全方位查询,本系统只能查找与计算机相关的信息。在创建词典时,只保存计算机专业术语和常用词语。因此搜索的速率和准确率都比同类搜索系统要高。但是,它也存在一些问题。现在它只能查询数据库中保存的一些数据,而不能去查询文本文件和网页。在出现新词时,只能手动添加,这样就导致了词典的灵活性不是很好。在设计中文分词算法时,为了不遗漏关键词,算法多次与词典中所有的词进行比较,影响运算速度。该系统不完善的地方很多,还需要继续的改进。在中文分词算法上