资源描述
问答系统1 目录引 言1第一章 研究背景21.1问答系统研究背景21.2传统的问答系统的不足21.3问答系统研究现状21.4问答系统的类型区分41.5问题的类型进行区分41.6中文问答系统研究51.7相关评测5第二章 系统分析62.1市场调查62.2问答系统的问题分析62.3问题分类62.4问题相似性判定72.5关键词扩展8第三章 数据库设计103.1数据库的需求分析103.2数据库表结构设计103.3E-R模型12第四章 系统详细设计与实现154.1系统工作原理介绍154.2系统数据流图164.3系统的实现算法164.4注册模块的设计与实现194.5注册模块的设计与实现324.6 系统首页的设计与实现344.7用户提问模块的设计与实现384.8问题显示模块的设计与实现414.9问题回答模块的登录与实现444.10后台管理模块的设计与实现45第五章 系统测试47第六章 总结48致谢49参考文献50引 言问答系统的设计目标是用简治、准确的答案回答用户用自然语言提出的问题。在人工智能和自然语言处理领域,问答系统都有着较长的历史。1950年英国数学家图灵(AMTurin8)在论文“Computing Machinery and Intelligence”中形象地指出了什么是人工智能,以及机器应该达到的智能标准。也就是通过自然语言问答的方式,判断机器是否具有智能。20世纪70年代随着自然语言理解技术的发展,出现了第一个实现用普通英语与计算机对话的人机接口LUNAR,该系统是伍德(WWoods)于1972年开发用来协助地质学家查找、比较和评价阿波罗一号飞船带回的月球岩石和土壤标本的化学分析数据的系统。本文将简要介绍国内外问答系统研究的进展情况。并且针对问答系统中的一个难点以及实现方法进行了讨论。并给出如何识别用户搜索关键字的方法。第一章 研究背景1.1问答系统研究背景随着因特网的快速发展,网络上流通的信息日益增加,它已俨然成为巨大的讯息流通交换平台,要在如此大量的数据库中找寻有用的数据着实不易,通常会藉助于搜索引擎的功能来达成,然而以关键词为主的搜索引擎常会找出所有相关的信息,但是其中也包含许多无用的数据,用户浪费很多时间浏览不相关的网页。随着互联网的发展,网络已成为人们获取信息的重要手段。目前,世界上最大的搜索引擎Google能够搜索的网页数量已经超过了百亿。传统的搜索引擎存在很多不足的地方,其中主要有三个方面:一是以关键词的逻辑组合来表达检索需求二是返回的相关性信息太多三是以关键词为基础的索引,停留在语言的表层,而没有触及语义,因此检索效果很难进一步提高。以上两点使得人们在互联网上的海量信息中快速准确地找到自己所需要的信息变得越来越困难。1.2传统的问答系统的不足传统的问答系统虽然可以对用户提出的问题给出确定的答案,但是这些问答系统的数据源是基于一个固定的文档集合,尚且不能满足用户的各种各样的需求。利用互联网上的资源是有效的解决之道互联网上具有丰富的信息,是问答系统数据源的理想资源,因此将问答系统与互联网结合起来,就变得非常必要。这也就促使了基于互联网的问答系统的出现和发展的问答系统的出现和发展。1.3问答系统研究现状问答系统的概念虽然提出的时间并不长,但已经形成发展出了一些比较成熟的系统。美国麻省理工学院人工智能实验室于1993年开发出来的START,系统(http:/www.ai.mit.edu/projects/infolab/start.html)是全世界第一个基于Internet的问答系统。START系统旨在为用户提供准确的信息,它能够回答数以百万的英语问题,主要包括与地点相关的问题(城市、国家、湖泊、天气、地图、人口统计学、政治和经济等)、与电影相关的问题(片名、演员和导演等)、与人物相关的问题(出生日期、传记等)以及与词典定义相关的问题等。该系统采用基于知识库和基于信息检索的混杂模式,系统还保留着原来的两个知识库,START KB”和“Internet Public Library。如果用户提出的问题属于这两个知识库的范畴,START就直接利用知识库中的知识返回比较准确的回答。反之,START系统将问题解析得到查询的关键词,通过搜索引擎得到相关信息,通过后续处理得到准确而简洁的回答返回给用户。比如提出一个问题“Who was Bill Gates? , START系统回答“Cofounder,Microsoft. Born William H. Gates on October 28, 1955,Seattle,Washington. 。同时系统还返回一个关于“Bill Gates网页链接,如果用户希望了解更详细的信息时就可以浏览改网页。美国华盛顿大学开发的MULDER系统(http:/mulder.cx/)是最早实现的基于Internet的全自动的问答系统。该系统没有知识库,而完全利用Internet上的资源得到答案。对于一个问题,MULDER系统返回的不是唯一的答案,而是一组候选回答,并利用统计的方法给每一个回答赋值一个权重,称之为置信度。比如,对于一个问题“Who was the fast American in space? ,MULDER系统的返回的候选答案中,Alan Shepard”具有70%的置信度,John Glenn”具有15%的置信度。同时在每一个答案下面给出相关的网页链接和该网页内容的摘要。AskJeeves (http:/ask.com/)是美国一个比较著名的商用问答系统。对于自然语言提出的问题,AskJeeves系统采用多种方式进行回答,直接返回一段文本,并返回一系列文档链接及其内容摘要,同时还采用多媒体文件的形式提供相关信息。比如对于问题 Who was Bill Gates?,系统在文本回答的基础上还将显示一张Bill Gate的照片。作为一个商用系统,AskJeeves的服务种类很多,不仅仅可以查找Web网页,也可以采用图片、新闻、产品作为数据源,从而得到所需的信息。AskJeeves系统中的问题分析部分是依赖手工完成的,为了能够正确理解用户的查询AskJeeves雇佣了数百专职人员构造问题模板,并为这些问题模板中常见的问题进行了缓存。系统的问题模板虽然能够细化和明确用户的需求,但由于需要人工产生和维护的,工作量非常大。美国密歇根大学开发的AnswerBus (http:/www.answerbus.com/)系统在多语种问题上进行了一些尝试,可以回答英语、西班牙语、德语、意大利语、葡萄牙语的问题。Microsoft公司的Encarta (http:/encarta.msn.com/)系统作为一个在线百科全书式的问答式搜索引擎,也提供了多语种的支持。对于用户的每一次查询,AnswerBus将返还5个网页链接,并给出XML和TXT的Possible answers。新加坡开发的LAMP为了更加正确的理解用户的查询意图,列出了person,organization,location,date,time。money,percent等7种查询类别让用户进行选择,LAMP不是返回网页链接,而是直接返还答案。LAMP所在网址http:/hal.comp.nus.edu.sg/cgi-bin/smadellz/lamp_query.pl此外,南加州大学利用自然语言处理、文本摘要等技术,开发的Webclopedia系统在各项评测中也取得了很好的效果;美国Language Computer公司的问答系统(http:/www.languagecomputer.com/demos/question_answering)在TREC评测中一直名列前茅。国内复旦大学开发的原型系统(FDUQA)己经具有了初步的效果,同时哈尔滨工业大学(金山客服)和中国科学院计算技术研究所也在从事该领域的研究。1.4问答系统的类型区分问答系统(Question Answering System, QA)是信息检索系统的一种高级形式。它能用准确、简洁的自然语言回答用户用自然语言提出的问题。其研究兴起的主要原因是人们对快速、准确地获取信息的需求。问答系统是目前人工智能和自然语言处理领域中一个倍受关注并具有广泛发展前景的研究方向。1.5问题的类型进行区分问答系统问答问题的类型进行区分:询问人(如:谁发现了北美洲?)、询问时间(如:人类哪年登录月球?)、询问数量(如:珠穆朗玛峰有多高?)、询问定义(如:什么是氨基酸?)、询问地点和位置(如:芙蓉江在重庆市哪个县?)、询问原因(如:天为什么是蓝的?)。问答系统分类如图1.1问答系统限定域问答系统开发域问答系统基于常用提问集问答系统机构数据库问答系统自由文本问答系统网络问答系统固定资料库问答系统单文本问答系统图1.1 问答系统分类从系统的设计与实现来看,自动问答系统一般包括三个主要组成部分:问题分析、信息检索和答案抽取。 目前国际上,问答系统的研究方兴未艾,许多大的科研院所和著名公司,都积极参与到该领域的研究,其中比较著名的如MICROSOFT、IBM、MIT、University of Amsterdam、National University of Singapore、University of Zurich、University of Southern California、Columbia University等等,国内在问答系统方面的研究相对国外较为不足,主要有中科院计算所、复旦大学、哈尔滨工业大学、沈阳航空工业学院、香港城市大学、台湾中研院等一些单位。1.6中文问答系统研究中文问答系统相对于英文有如下几个方面的难点或不足之处: 连写:中文是连续书写,分词是汉语言处理的基础。中文问答系统由于是句子级别的信息检索,要分析句子,首先要分词。 形态:汉语缺乏狭义的形态变化,如英文中的主动被动语态,完成时进行时等,形态对于计算机就是标记,有利于计算机的处理。 语法:汉语语法灵活,句子各成分之间的关系靠词序、“意合”、虚词,变化较多。 语义:一词多义、同音词、同义词、近义词等,以及丰富的表达方式,上下文依赖度高,省略语等都是计算机处理的难点。 语法研究:面向计算机处理的中文语法研究不足,如中文问答系统需要的关于中文句型形式化、不同句型之间的转换的研究资料极少。 相关资源:缺乏包括语法、语义词典等中文语言学资源和相关生熟语料,国外这方面强得多,如TREC就提供的相当数量的可用于英文问答研究和评测的语料。 中文问答系统需要在现有的中文信息处理技术基础上,充分研究和利用问答的特性与需求,通过各种方法解决和克服(或暂时回避)以上难点和困难,设计和开发问答系统。1.7相关评测自1999 年文本检索会议( Text Retrieval Conference ,简称TREC) 引入问答系统评测专项(Question Answering Track ,简称QA Track) 后,人们对基于自然语言的问答系统再次产生了浓厚的兴趣,在近些年的TREC 比赛中,QA Track 是最受关注的评测项目之一。 日语问答评测平台Question Answering Challenge (QAC) 是从2002 年开始的,每两年举办一届。自NTCIR-5开始,其CLQA专项中加入中文评测语料,但目前尚未见有简体中文。 由IST Programme of the European Union 资助的Cross Language Evaluation Forum (CLEF) 在2003 年设立第一届多语言问答系统评测(Multilingual Question Answering) 项目,并计划每年举办一次。第二章 系统分析2.1市场调查在正式立项之前必须进行可行性分析,而可行性分析的基础是对系统的市场调查。市场调查主要由两部分组成:一般调查和信息需求初步调查。一般调查包括找出相近的站点,对这些站点的网址宣传方法、主页设计、文字叙述等情况进行了分析,并了解整个人才交流的运作情况,充分发挥本网站的优势。信息需求初步调查是通过发E-mail和讨论组的方式对部分人才和企业进行调查了解。本系统界面简洁、友好,操作简便易用,在设计时充分考虑人才网站的特点,力求简洁,避免花哨的内容,以冲淡主题,做到个人用户与企业用户兼顾,使系统简洁实用、易操作。2.2问答系统的问题分析问题分析即通过对问题的语法、语义结构等进行解析,获取该问题的关键词,提取问题的焦点、确定问题类型和答案类型等等。问题分析部分主要完成以下几部分工作:确定问题的类型、提取出问题的关键词、依据问题的类型等因素对关键词进行适当的扩展。从自然语言处理的视角来看,还要对问题进行分词以及词性标注等分析过程,有些问答系统还对问题进行句法分析和语义分析。2.3问题分类在TREC 2003和2004中,QA主任务把问题分成3类进行分别处理。这3类问题是陈述类问题(FactoN)、列表类问题(Nst)和定义类问题(defin小ons)c1551。唐素勤在教学自动问答系统中把问题分为求知性提问与求证性提问两类u“3。求知性提问即用户从系统中获取未知知识,如“什么是知识抽取?”;求证性提问指用户提问前已具备了某些相关的知识,通过问答对自身已有的模糊知识或不完整知识进行验证、澄清或补充,如“情报学专业的本科阶段名称是信息管理与信息系统吗?”。问题从形式上分为疑问、设问、反问或特指问、是非问;从目的上分为查找信息、验证事实、收集资料;从性质上分为开放型、封闭型“V;按照复杂程度分为是非问题、选择问题、特指性问题、语境性问题、推理性问题、概括性问题、专家性问题。如表2.1所示。表2.1 问题分类是非问题选择问题特指性问题语境性问题推理性问题概括性问题专家性问题是非问题(封闭型):数据挖掘与知识发现是一“回事吗?选择问题(封闭型):数据挖掘与文本挖掘。哪个概念的范畴更大?特指问题:在情报学博士生导师队伍中。哪一位的博土学位取得最早(谁是拥有博士学位最早的情报学博导)?统计型问题:情报学博士点有哪几家?过程型问题:数据库知识发现需要哪些步骤?关系型问题:知识管理与知识工程有何区别,有何联系?原因型问题:现在,为什么没有本科阶段的情报学?推理性问题:数据挖掘是从数据中挖掘,发现的结果是知识;那么信息分析是对信息进行分析,研究出的结果就是情报吗?(根据数据挖掘与知识发现的关系推论信息分析与情报研究的关系)概括性问题:数据挖掘是从数据中挖掘文本挖掘就是从文本中挖掘,那么XX挖掘就是从XX中挖掘吗?专家性问题:数据挖掘与知识发现有何区别?在研究所读研究生与在高校读研究生有何不同?上述关于问题的分类并不是很好,例如。专家性问题指只有专家才能回答的问题,问题的专业性非常强,也可能是概括性的,也可能涉及推理。问答系统中少有反义疑问句。针对于不同类型的问题制定相应的答案抽取规则,以便在答案抽取阶段应用这些规则来抽取问题的答案。大部分的自动问答系统部是按照事先规定好的类别进行分类。但是这种分类还是存在很多不足的地方,人为因素太多,而且分类太粗,并不能完全符合实际的要求。所以也有一部分研究人员提出对问题自动分类的思想。首先收集大量的问题作为训练语料,然后通过程序统计出经常出现的疑问短语。例如通过统计发现询问原因的线索词有“区别是什么?”、“有什么区别”、“有何差异性?”。2.4问题相似性判定除了对问题类型进行分析以外,有的问答系统还使用问题库进行间题的相似性判定。系统包括一个常问问题(FAQ)库,把用户经常提问的问题及其答案存储起来。有了问题库。光拿用户的提问到FAQ库中进行搜索,查找有没有相同的问题。如果有,就可以直接把FAQ库中这个问题的答案返回;如果没有,查找是否有相似的问题。这样,对于用户常问的问题,问答系统就可以很快给出答案,不需要经过复杂的处理,而且还能保证答案的正确性。所以有了FAQ库之后,既能提高问答系统的效率。又能提高准确性。十万个为什么、新浪的爱问、百度的知道、网易的知识人、网上咨询以及专家问答系统等资源都是很好的FAQ库。问题形似型判定主要体现在主题相似、结构相似、格相似以及文法相似。结构相似属于语法方面的范畴,格相似属于语义方面的范畴,间法相似属于语用方面的范畴。问题相似性判定的原则为:格相似强于结构相似,结构相似强于主题相似。格相似与结构相似就能确定问题相似了,几乎不需要考虑主题。主题的考虑主要用在目标文献检索的确定上。如“知识管理与知识工程有何区别?”与“工程管理与工商管理有什么区别?”,这两个问题的主题完全不同,属于两个不同的领域;而结构非常相似,“X与Y有何区别?”;语义格也非常相似(可以说是相同),即求di财erencex,y,在前一个问题中,x,y分别为数据挖掘与知识发现,后一个问题中x,y分别为工程管理与工商管理。问法相似指的是同一个问题使用不同的问法,目前还很难从技术上解决语用的问题。基于常见问题集的问答系统类似于基于实例的机器翻译系统。基于实例的机器翻译系统是查找最相似的翻译例句,然后对句中不同的部分根据词表换成相应的词即可。而基于常见问题集的问答系统则是查找最相似的间句,却不能把不同的词简单替换,如果强制性替换,首先要有题对库。基于实例的机器翻译直接使用双语词典,而问答系统却很难有题对库,至少要使用三元组概念或者语义概念关系的语义词典,或者本体。例如首都中国,北京,首都英国,伦敦。因此,从这点上来讲,基于常见问题集的问答系统在回答新问题时,比基于实例的机器翻译在翻译新句时要困难。关键词提取 在用户提问的问题中,需要提取对后续检索系统有用的关键词。关键词主要由名词、动词、形容词、限定性副词等实词组成。疑问词和一些常用的“吧、了、的”等词就应该被过滤掉。有一些问答系统还可以把关键词分为两种:一般关键词和核心关键词。核心关键词也称“必须含有关键词”。核心关键词指这些关键词必须在答案句子中含有,而一般性关键词可以不被答案句子包含。核心关键词由专有名词、限定性副词(如最大、最高、最快等)、时间组成。之所以要制定“必须含有”的关键词原则是因为它们对问题有极强的限定性作用,如果不含有它们的句子几乎不可能是正确的答案。例如:问题是“情报学的第一个博士点在哪个学校?”而检索的结果应该是“武汉大学”或者“武汉大学于1990开始招收情报学博士”,而不是“北京大学于1998年开始招收情报学博士”,因为这显然不是用户想得到的结果,之所以出现这种情况的原因就在于非常重要的关键词“第一个”没有包含在答案句子中。如果加上“必须含有”的关键词这个限制,那么这个答案就不会被检索出来,因此通过这些关键词的作用可以极大地提高检索的准确性。关键词被赋予不同的权重,在检索句子时这些权重用来计算句子的权重。通常名词、限定性副词会有比较高的权重。2.5关键词扩展为了提高检索系统的召回率,一般的问答系统都对关键词进行扩展。由于在问题空间和文档空间之间存在着天然的语义鸿沟,使用基于问题分析直接提取的关键词进行查询,常常不能获得满意的效果。因为在答案段落中某些词常常不是原来问题的关键词而是这些关键词的扩展。例如:问题是“搜索引擎中anchor文件指的是什么?”,答案的句子是“把锚库文本变成顺排索引,存到文档索引库里,并用锚库所指向的doclD进行关联”在问题中使用的是“anchor”,而在答案中却采用了“锚库”这个词汇。这就造成关键词查询失败,因此需要对关键词做适当的扩展常用的关键词扩展方式有:名词同义词扩展和语义蕴涵扩展、动词同义词扩展(意义用法相同的词)、根据问题类型扩展。部分工作在有些系统中由一个叫做“检索提问生成器”的组件完成,它采用不同的方法生成扩展后的检索式。如把词的形态变化和导出词作为检索词。问答系统中通常可以采用同义词词林、WordNet、HowNet等同义词词典进行查询关键词的扩展。还有一些问答系统通过统计的办法来扩展关键词。这种方法需要大量的问题和答案语料来进行训练。每一类的问题所对应的答案一般都有某种共同的特性口。例如,对于询问地点的问题,答案中经常会出现“在、位于、坐落在、地处”等关键词。所以通过统计,找出这些词后,就可以把它们添加到查询式中。关键词扩展虽然提高了系统的召回率,但如果扩展不适当会极大地降低检索的正确率,因此一般的问答系统对关键词的扩展都是很谨慎的。这些系统往往都对关键词的扩展添加很多限制条件,例如只对名词的关键词进行扩展。另外还有一些问答系统是用检索返回来的相关文档对关键词进行扩展。扩展后的关键词的重要性往往比从问题中提取的关键词的重要性低,为了提高系统的准确性,很多问答系统又对关键词赋予权重,以此来区分他们之间的重要性。 关键词扩展属于问题分析模块,因为关键词扩展旨在解决问题涉及哪些词;而检索式的构造属于文档检索模块,因为检索式构造旨在解决这些关键词和目标文献之间可能的相关关系。第三章 数据库设计3.1数据库的需求分析根据系统需求,可以列出以下数据项和数据结构:用户表:包括用户名、密码、真实姓名、用户积分、性别、电话、生日、密码保护问题及答案;问题表:包括问题编号、提问者、问题题干、提问时间、分类名称、子类名称、图片、最佳答案编号;答案表:包括答案编号、答案内容、问题编号、回答者、回答时间、提问者评论、好评次数;管理员表:用户名、密码、密码保护问题及答案;问题父类表:包括问题分类;问题子类表:分类名称、子类名称;3.2数据库表结构设计数据库表结构设计如以下各表表示表3.1 用户表(aa_user)字段名数据类型是否为空默认值备注字段说明usernamevarchar(20)N主键用户名passwordvarchar(200)N密码namevarchat(20)N真实姓名integralintY用户积分sexvarchar(4)N性别phonevarchar(11)Y电话datedateY生日question1varchar(100)Y密保问题1question2varchar(100)Y密保问题2question3varchar(100)Y密保问题3answer1varchar(100)Y答案1answer2varchar(100)Y答案2answer3varchar(100)Y答案3注:用户表保存用户相关信息,如用户名、密码、电话号码等信息。这些都属于用户隐私,需要采用一定的安全措施对用户信息进行管理。表3.2 问题表(aa_question)字段名数据类型是否为空默认值备注字段说明Q_IDlongN自动增长主键问题编号usernamevarchar(20)N外键提问者姓名problemvarchar(500)N问题timedateN提问时间typevarchar(20)N分类名称sub_typevarchar(20)N子类名称picturevarchar(100)Y图片A_IDlongYNULL外键最佳答案表3.3 答案表(aa_answer)字段名数据类型是否为空默认值备注字段说明A_IDlongN自动增长主键答案编号Q_IDlongN外键问题编号contenttextN答案内容usernamevarchar(20)N外键回答者timedateN回答时间commentvarchar(100)Y提问者评论goodintY0好评次数表3.4管理员表(aa_manager)字段名数据类型是否为空默认值备注字段说明usernamevarchar(20)N主键用户名passwordvarchar(200)N密码typevarchar(20)N用户类型question1varchar(100)Y密保问题1question2varchar(100)Y密保问题2question3varchar(100)Y密保问题3answer1varchar(100)Y答案1answer2varchar(100)Y答案2answer3varchar(100)Y答案3注:管理员表记录了管理员的各种信息,用户名和密码是用户登录时的身份验证机制求职招聘状态描述将为用户提供有效的求职招聘路径,这不仅有利于管理员对用户的管理,同时也利于用户自己的管理与维护。表3.5 问题分类(aa_question_type)字段名数据类型是否为空默认值备注字段说明typevarchar(20)NY分类名称表3.6 问题分类2(aa_question_subType)字段名数据类型是否为空默认值备注字段说明sub_typevarchar(20)N主键子类名称typevarchar(20)N外键分类名称3.3E-R模型为了把用户的数据要求清晰明确地表达出来,通常要建立一个概念性的数据模型(也称为信息模型)。概念性数据模型是一种面向问题的数据模型,是按照用户的观点来对数据和信息建模。它描述了从用户角度看到的数据,它反映了用户的现实环境,且与在软件系统中的实现方法无关。最常用的表示概念性数据模型的方法,是实体联系方法(EntityRelationship Approach)。这种方法用ER图描述现实世界中的实体,而不涉及这些实体在系统中的实现方法。用这种方法表示的概念性数据模型又称为ER模型。ER模型中包含“实体”,“联系”和“属性”。在本系统中,问题父类与问题子类的关系是一对多的关系(1:N),问题与答案是一对多的关系(1:N),问题、答案与用户之间的关系是(1:N)如图3.1,问题父类与问题子类间的关系3.2所示。在本系统数据表中用到的主键有:管理员表中的username字段(管理员名);问题表中的Q_ID字段(问题编号);答案表中的A_ID字段(答案编号);用户表中的username字段(用户名);问题父类表中的type字段(父类名称);问题子类表中的sub_type字段(子类名称);问题父类问题子类属于父类名称子类名称1N图3.2问题父类与问题子类间的关系问题表问题内容提问时间问题父类问题图片问题子类问题编号最佳答案答案表答案编号答案内容回答时间回答者好评次数提问者评论用户表密码保护答案性别积分真实姓名密码用户名生日密码保护问题属于属于NN11图3.1 问题答案与用户间的关系参照完整性是保证在主键(被参照表中)和外键之间的关系总是得到维护。对两个相关联的表(主表和从表)进行操作数据的插入和删除的时候,通过参照完整性保证它们之间的数据的一致性。用户自定义完整性,不同的数据库系统根据起数据应用环境的不同,往往还需要一些特殊的约束条件。它反应某一具体应用所涉及的数据必须满足的语义要求。对于用户自定义完整性可以通过数据库设计,也可以通过程序代码来实现。由于程序设计的灵活性和便捷性,在整个系统的调试过程中对于不完善的地方只需对代码进行修改而不用更改数据库,因此在系统中采用了程序代码来实现数据库用户自定义完整性的约束。第四章 系统详细设计与实现4.1系统工作原理介绍本系统采用B/S结构(Browser/Server,浏览器/服务器结构)和基于Web服务两种模式,是一个适用于Internet环境下的模型结构。只要用户能连上Internet,便可以在任何时间、任何地点求职招聘求职的内容。系统工作原理图如图4.1所示:图 4.1 系统工作原理图系统的工作流程包括以下一些关键环节:(1)用户注册。在每一个用户使用该系统之前需要注册,系统会将用户输入的信息记录到用户模型中。(2)用户登陆。用户输入用户名和密码后,系统验证是否正确并决定用户是否能进入进行求职招聘。(3)问题搜索。用户在搜索框中输入要搜索的关键字进行搜索,当用户输入多关键字的时候要用“空格”隔开。系统将根据用户的输入对关键字进行拆分和对相关内容搜索。(4)问题发表。用户单击我要提问,在弹出的网站中输入问题,进行发表问题,问了进一步将问题阐释清楚积分达到100(含)分以上的用户在发表问题的时候可以附加一张不超过50Kb的JPG格式图片。提问一次将花费积分5(5)问题回答。用户单击我要回答,在弹出的网站可以选择自己想要回答的问题,回答问题一次将增加积分5,如果回答的问题被提问者采纳为最佳问题将获得5分的奖励。(6)用户信息管理。其中包括对用户信息的查询和修改,系统会根据修改后的用户信息重新自动合成网页内容。(7)后台管理。管理员通过后台可以对用户、问题及答案进行管理。可以将不合法的信息和恶意用户进行删除 。4.2系统数据流图数据流图(Data Flow Diagram,简称DFD)能精确地在逻辑上描绘系统的功能、输入、输出和数据存储等,摆脱了物理内容,是描绘系统逻辑模型的最主要的工具。经过系统详细调查分析以及用户需求分析,我们得到了新系统的数据流图。如图4.2用户登录数据流图:图4.2登录数据流图4.3系统的实现算法用户信息初始化算法 通过前面几章的分析,我们已经知道用户信息是求职招聘导航的基础。由用户模型可以了解,个人信息是用户登陆个性化网上人才招聘系统的入口;求职招聘记录则是根据用户的求职招聘进度动态更新提供内容、求职招聘状态提示的必要条件。所以设计好用户信息输入算法对后面的智能导航有着重要作用。用户信息是在第一次使用系统注册时输入的。该算法中牵涉的数据有:用户数据库中的用户信息管理表、职位信息表。算法主要功能是通过接收用户输入或选择的信息初始化用户模块中有关信息,以下便是该算法所涉及的数据结构和详细过程。输入:1)用户输入的信息,如姓名,密码等。 2)用户选择的信息,如用户求职招聘状态等。输出:用户模块信息初始化。算法的主要步骤如下:(1)初始化,包括打开数据库aa_user、建立相关控件与数据库的连接等;(2)将用户信息管理表、用户状态表各添加一条记录;(3)读取各文本控件或列表控件中用户输入或选择的信息到各表中对应的字段中;(4)结束。检索算法用户打开网页后在文本框中输入关键字进行搜索,系统将根据用户输入的关键字进行搜索,并返回和关键字相关的信息,若用户输入的是多关键字系统将对用户输入的关键字进行拆分,然后搜索所有含有相关信息的记录返回给用户界面:(1) 用户关键字,并进行提交;(2) 从提交表单中提取数据,并进行相应判断;(3) 连接数据库,建立记录集,用查询语句对表中数据进行查询;(4) 将结果进行加工显示给用户;(5) 结束;算法流程图如图4.3所示:开始开始初始化系统输入关键字并提交判断用户输入,若为多关键字则进行拆分根据关键字查询数据库返回查询结果并进行加工将加工后的结果显示到用户界面图4.3 搜索算法流程图 4.4注册模块的设计与实现在本系统中,将会有一些公用页面,即每个文件或部分文件都会用到的文件,在使用这些文件时,只需要一个包含语句即可,这样大大减少了代码的冗余,同时也使编码简单,减少了许多工作量。主要的公用文件包括:conn.php文件、logout.php文件、is_login.php等。(1)conn.php 文件对于程序中建立数据库连接和关闭数据库连接的操作,最好放在一个包含文件中,这样便于维护和修改。前面一部分为建立数据库连接的语句,其中mysql_connect为建立数据库连接的对象,mysql_select_db为数据库连接字符串,它表明了数据库连接的物理路径以及采用的数据库类型,这里采用的是MySQL数据库。 (2)is_login.php 文件is_login.php是用户权限验证文件,方便调用和维护减少代码冗余。(3)logout.php 文件logout.php文件是用户退出文件,改文件用于关闭和删除用户SESSION。其他一些公用文件的代码这里将不一一列举。系统公用页面用户注册页面用户注册界面如图4.4所示。用户必须填写以下内容,这便于对用户的管理以及用户的安全性。用户注册页面的信息是用户进入系统的有利凭证。该页面涉及的主要PHP文件为register.php文件。图4.4注册页面用户注册var DS_x,DS_y;function dateSelector() /构造dateSelector对象,用来实现一个日历形式的日期输入框。 var myDate=new Date(); this.year=myDate.getFullYear(); /定义year属性,年份,默认值为当前系统年份。 this.month=myDate.getMonth()+1; /定义month属性,月份,默认值为当前系统月份。 this.date=myDate.getDate(); /定义date属性,日,默认值为当前系统的日。 this.inputName=; /定义inputName属性,即输入框的name,默认值为空。注意:在同一页中出现多个日期输入框,不能有重复的name! this.display=display; /定义display方法,用来显示日期输入框。function display() /定义dateSelector的display方法,它将实现一个日历形式的日期选择框。 var week=new Array(日,一,二,三,四,五,六); document.write(); document.write( .ds_font td,span font: normal 12px 宋体; color: #000000; ); document.write( .ds_border border: 1px solid #000000; cursor: hand; background-color: #DDDDDD ); document.write( .ds_border2 border: 1px solid #000000; cursor: hand; background-color: #DDDDDD ); document.write(); document.write(); document.write(选择日期); document.write(); document.write( ); document.write( ); document.write( ); document.write( ); document.write( ); document.write( +this.year+年+this.month+月); document.write( ); document.write( ); document.write( ); document.write( ); document.write( ); document.write( ); for(i=0;i7;i+)document.write( +weeki+); document.write( ); document.write( ); document.write( ); for(i=0;i6;i+) document.write( );for(j=0;j7;j+) document.write( ); document.write( ); document.write( ); document.write( 【关闭】); document.write( ); document.write(); dateShow(document.all(DS_+this.inputName).nextSibling.nextSibling.childNodes0.childNodes2,this.year,this.month)function subYear(obj) /减小年份 var myObj=obj.parentNode.parentNode.parentNode.cells2.childNodes; myObj0.innerHTML=eval(myObj0.innerHTML)-1; dateShow(obj.parentNode.parentNode.parentNode.nextSibling.nextSibling,eval(myObj0.innerHTML),eval(myObj2.innerHTML)function addYear(obj) /增加年份 var myObj=obj.parentNode.parentNode.parentNode.cells2.childNodes; myObj0.innerHTML=eval(myObj0.innerHTML)+1;dateShow(obj.parentNode.parentNode.parentNode.nextSibling.nextSibling,eval(myObj0.innerHTML),eval(myObj2.innerHTML)function subMonth(obj) /减小月份 var myObj=obj.parentNode.parentNode.parentNode.cells2.childNodes; var month=eval(myObj2.innerHTML)-1; if(month=0) month=12; subYear(obj); myObj2.innerHTML=month; dateShow(obj.parentNode.parentNode.parentNode.nextSiblin
展开阅读全文