层次化语义脉络文档查询方法 【技术领域】
本发明涉及一种用于非结构化或半结构化文档查询的计算机检索方法,尤其是用于网页文档的查询。
背景技术
文档查询是科学工作中的重要环节。随着计算机技术、通信技术、信息技术等的飞速发展,人们可以获得的文献资料越来越多,视野变得越来越开阔。然而问题也随之产生,人们可能不必为资料比较少而发愁,却为资料太多很难发现有用的资料发愁,人们更关心如何表达更复杂的文档查询要求,如何获取更深层的知识。因此为用户提供简便、直观、有效、更强能力的查询方法具有较大意义。
目前常见的商用查询系统通常提供两种查询方式:简单查询和高级查询。简单查询一般只需要用户输入比较少的关键词,逻辑关系比较简单,而高级查询则输入的关键词比较多,甚至可以定义比较复杂的逻辑关系。在大多数情况下,简单查询和高级查询之间的差别一般都不是本质上的,常常体现为查询所使用的关键词的多少不同,它们之间不存在层次关系,不容易反映用户的复杂的查询意图。
随着网络技术的发展,通过网络所能获取的文档将越来越多。目前通用的关键词查询技术虽然简单有效,但是却存在以下两个问题。一个问题是关键词查询所获得的文档范围太大,增加了用户从中筛选的难度,需要消耗用户更多的时间。另一个问题是关键词查询不能表示比较深层的知识,它往往局限于关键词之间的单层的与或非关系。
为了解决这些问题,提出了许多方法。例如查询扩展方法通过同义词、近义词、上下义词的扩展将关键词查询中的关键词进行扩展,扩大查询范围。而目前热门的语义网络、本体论等则希望能在语义层次上理解文档和用户的查询意图,然后通过两者的匹配实现文档查询。遗憾的是,由于自然语言极其复杂,这些研究还停留在研究阶段,并没有在常用的商用查询引擎上出现。
与本发明比较接近的有:
(1)文献[1]针对SQL语言中SELECT语句的WHERE子句的要求设计了一个多叉树,用于输入查询的条件,这样可以构成非常复杂的SQL查询语句,但是这种多叉树主要应用于管理信息系统的开发,是一种对数据库操作的可视化操作,而不是对非结构化的文档查询进行操作。
(2)文献[2]则不对用户的查询请求进行分词等预处理,而是以语义单元为基本单元进行语义分析,得到语义表达式之后再借助于语义单元之间的关系进行查询扩展,向初始查询中加入相关的词或短语。这种查询最终也归结为关键词查询,算法比较复杂,不容易表达关键词之间的复杂关系,也限于表达关键词之间的单层关系。
(3)本发明人在文献[3]提出的层次化方法,可以用查询树来表达用户的查询意图,但该方法同文献[1]一样,是应用在数据库应用系统中,处理的是结构化的数据库表。
(4)本发明人提出语义脉络文档查询方法,并于2008年12月10日申请发明专利,但该发明主要侧重于用语义脉络进行单条查询意图的文档查询,没有考虑层次化,不能表达或实现更深层次的文档查询或知识获取[4]。
主要参考文献:
[1]邓亚,山岚,李明。用“多叉树”构造SQL查询中的wHERE子句——“多叉树”在VB中的实现及应用[J]。微机发展,2003,13(7):12-14
[2]李莉,高庆狮。一种基于语义单元的查询扩展方法。计算机科学,2008,35(2):201-204
[3]Wensheng Yin,Pinghui Tu,Xiuguo Chen,Hengxi Zhang.Problem Oriented Analysis andDecision Expert System with Large Capacity Knowledge-Base.2008International Conferenceon Intelligent System and Knowledge Engineering,Nov.17-18:32-372008,Xiaman China
[4]尹文生。语义脉络文档查询方法。专利申请号:200810236750.3,2008年12月10日。
【发明内容】
为了克服现有的文档查询方法中不能表达复杂关系和不能对文档进行较深层次知识查询功能的不足,本发明提出一种层次化语义脉络文档查询方法。该方法用查询树来描述用户的查询意图,其中,查询树的叶结点称为查询子句,在其中采用查询语义脉络来描述一个具体的查询操作,而分支结点则为与或非操作结点,用于对查询子句的运算结果进行逻辑运算,并根据最后的逻辑运算结果决定被测试文档是否被选上。因为查询树可以描述非常复杂的关系,因此这种查询方法可以描述比较深层的知识,对于从文档中获取知识是非常有利的。
本发明在每条查询子句操作时采用了语义脉络概念,可以描述为:如果一个句子r所有的组成成分(表现为构成句子语法成分的词或词组),在另一个句子s中存在,并且对应词或词组地词类相同,则称句子r是句子s的语义脉络。其中,如果s中所有组成部分的顺序都与r中对应部分相同,则称r和s为有序语义脉络匹配,否则称r和s为无序语义脉络匹配。语义脉络的概念可以参阅本发明人的另一个发明申请200810236750.3(文献[4])。
本发明所采用的技术方案如图1所示:
步骤101:定义查询子句。使用用户界面定义查询子句。让用户以合乎逻辑的词、短语或句子输入自己的每一个具体的查询要求,并且设定这些词、短语或句子在文档查询测试时的顺序关系,即构建查询子句。每一个查询子句构成查询树的叶结点。
步骤102:定义查询树。使用用户界面定义查询子句之间的关系。用查询树的分支结点表示查询子句之间的关系,这些关系包括:与、或、非及其组合。
步骤103:查询子句测试。将每条查询子句作为查询语义脉络对文档进行测试。只要该查询子句中的所有词均在文档中的一条句子或扩展句子(即包含段落内容的句子)中存在,该查询子句就停止测试并返回真,否则返回假。
步骤104:查询树逻辑运算。将每条查询子句测试返回结果根据查询树定义的关系进行逻辑运算,最后得到查询树根结点的逻辑运算结果。如果根结点运算结果为真,则当前文档被选入被查询文档,否则丢弃。
本发明所带来的有益效果是,在进行文档查询时可以使用非常常用的树窗口表达自己的查询意图,操作简单方便,但表达的查询意图非常复杂、有深度,可以有效地从非结构的网页等文档中获取知识,而不需设计非常复杂的知识和数据获取界面。
【附图说明】
下面结合附图和实施例对本发明进一步说明。
图1是本发明的技术方案流程图。
图2是查询子句界面的示意图。
图3是实施例1的查询树结构图。
【具体实施方式】
如图1所示,以汉语电子文档作为说明对象,根据本发明所揭示的层次化语义脉络文档查询方法的流程图和实现方案为:
步骤101:定义查询子句。定义查询子句和查询树采用图2所示的交互界面,其中图2中上半部分用于定义查询子句,称为查询子句界面,而下半部分用于定义查询树,称为查询树界面。定义查询子句的目的是获得用户的查询意图。用户的查询意图是通过输入一串词或词组来实现的。它们在形式上具有一定的逻辑关系,是组成一个句子的关键词。查询子句界面主要由“查询词”输入编辑框(201)、“设置测试要求”按钮(202)、“词义扩展”按钮(203)、“选进查询树”按钮(204)组成。
用户在编辑框(201)中输入查询词(各个词以空格分隔)表达他的查询意图。系统将记录这些词的词类、顺序关系等,并形成查询语义脉络,成为进行语义匹配测试的依据。用户在输入查询语句时,还可在并列的主语或宾语成分中间加入特殊符号“|”、“^”以表明这些主语或宾语是否需要同时存在。
语义匹配测试的关键是测试必须针对文档中的每一个句子或者扩展句子(包括段落的标题)进行。“设置测试要求”按钮(202)则用于打开一个设置对话框设定匹配的要求。例如,可设置无序匹配,即只要在被测试文档中同一句子出现用户输入的关键词即认为匹配成功;设置严格有序匹配,则只有文档中存在一条包含查询语义脉络中所有词的句子,而且这些词的词类相同,其顺序也完全相同才算匹配;设置被动语句,则主谓宾和宾主谓都是一样的;还可以根据需要设置选项,以适应语义脉络中谓词的变化;也可以设置选项,将当前句子所属的段落标题也并入当前句子中。
由于在语义查询扩展时存在同义词、近义词、上下义词情况,所以可以点击“词义扩展”按钮(203)查看、增加、删除、修改用户输入的各查询词的同义词、近义词、上下义词,用各查询词的同义词、近义词、上下义词去构成新的查询子句。用户输入的查询子句和扩展的查询子句之间的关系是“或”关系,即只要任一个查询子句满足,则被测试文档就是用户所需的查询文档。
当查询子句构成后,用户点击按钮“选进查询树”按钮(204)则在查询树当前结点中生成一个子结点,并将当前查询子句的数据记入该结点中。查询子句的数据可用一个类来记录,该类包含数据项有:查询子句编号,查询词链表,语义脉络匹配类型,词义扩展标志,增加的查询词同义词、近义词和上下义词链表等等。
步骤102:定义查询树。查询树是用来定义查询子句之间的关系的,其叶结点表示查询子句,而分支结点表示结点之间的关系。因为查询子句总是定义为当前节点的子结点,所以定义查询树的任务主要就是增加“或”、“与”、“非”结点和删除当前结点和全部结点。查询树界面如图2下部分所示,左边部分是查询树的图形表示(205),右边部分是对查询树的操作,下面是执行查询的按钮“查询”(211)。同所有其他树的操作一样,点击右边部分的按钮“或”(206)、“与”(207)、“非”(208)可以在当前结点下增加“或”、“与”、“非”结点,而点击右边部分的按钮“当前”(209)、“全部”(210)可以删除当前结点、全部结点。
步骤103:查询子句测试。查询子句的测试可以依照本发明人提出的语义脉络文档查询方法进行,即对数据库中所有的文档按照关键词、句子分隔符和代词进行标记,并根据代词指代关系将其替换为对应的关键词;最后按照用户对这些关键词及其结构关系的设定对查询语义脉络与被测试文档中的每条句子进行匹配测试,只要被测试文档中存在一条与查询语义脉络匹配的句子,即与关键词名称、词类、顺序等关系相同,则认为测试通过,并返回真。查询子句测试的详细方法可查阅本发明人的专利申请:200810236750.3。
步骤104:查询树逻辑运算。在层次化的语义脉络文档查询中,查询子句测试通过并不意味被测试文档就是用户所需文档,它还必须满足整个查询树的要求。一个被测试文档是否是用户所需文档,应该满足所有的查询子句的测试(可以存在测试短路)以及按照查询树的逻辑运算的最终结果。查询树的逻辑运算可以从根结点开始使用深度优先方式进行搜索,基本算法设计如下:
//分支结点的调用
FOR Each pChild in当前结点的分支子结点DO
将pChild作为当前结点递归调用本算法,得到返回值ret
IF当前结点为“或”节点THEN
IF ret=TRUE THEN返回TRUE
ELSE IF当前结点为“与”节点THEN
IF ret=FALSE THEN返回FALSE
ELSE IF当前结点为“非”节点THEN
IF ret=TRUE THEN返回FALSE
ELSE返回TRUE
END IF
END DO
//查询子句结点的调用
FOR Each pInquery in当前结点的查询子句结点DO
对pInquery进行语义脉络测试,得到返回值ret
IF当前结点为“或”节点THEN
IF ret=TRUE THEN返回TRUE
ELSE IF当前结点为“与”节点THEN
IF ret=FALSE THEN返回FALSE
ELSE IF当前结点为“非”节点THEN
IF ret=TRUE THEN返回FALSE
ELSE返回TRUE
END IF
END DO
//查询子句的最后处理
IF当前结点为“或”节点THEN返回FALSE
ELSE IF当前结点为“与”节点THEN返回TRUE
END IF
返回FALSE
这里约定“非”结点只有一个子结点。
当该算法又回到根结点时,查询树的逻辑运算结束。如果根结点的逻辑运算值为真则当前被测试文档选为用户需要的文档,否则该文档不是用户需要的文档,应该将其丢弃。
实施例1:
假如武汉挑选北京奥运候选火炬手的条件是:
(1)本地区常住居民包括有户口的人员①或有暂居证的长期务工人员②,年龄大于14岁③,有能力顺利完成400米火炬接力(通过测试)④,没有犯罪前科⑤
(2)社会公开报名的话,必须在本行业有突出贡献⑥,如果是下岗工人或者残疾人则应有感人的故事⑦,不包括专业体育人员⑧
(3)组织系统选送的话,限于专业体育人员⑨并获得国家级比赛项目名次⑩
作如下假定:通过自由报名和组织选送两种方式申请火炬手;每一个候选者必须递交一份申请书,在每份申请书中必须写明符合的候选条件,不具备的条件不写;每个条件用一个句子描述;以电子文档的方式提交申请,格式不限。
将候选条件用数字加以描述,例如“本地区常住居民包括有户口的人员”用数字①加以描述,而分支结点用英文字母表示,可以得到图3所示的查询树。图3中叶结点中表达的查询语义脉络可以采用如下方式描述:
①武汉户口
②有暂居证
③大于14岁
④通过测试
⑤没有无犯罪
⑥有贡献
⑦有感人故事
⑧专业体育
⑨专业体育
⑩国家比赛
查询语义脉络描述的选择方案是可选的,例如可以增加一些词义扩展定义,或者并列关系,如约定③填写年龄,即语义脉络用“年龄14|15|16|17...|100”表示,还可以设定无序,如⑧中专业和体育可以无序,即专业体育和体育专业都一样。
本发明适合非结构文档(包括网页)的检索,对本领域的普通技术人员而言,本发明所涉及的数据结构和算法可以在一般的计算机系统中实现,举例而言,可以使用高级程序设计语言VC++和数据库系统Access加以实现。如果需要在网络搜索引擎实现本发明,则需要在记录关键词的数据结构中增加该关键词的位置数据、句子的分割数据、代词替换等数据,并且增加一个树来记录每一篇文档的标题信息。
以上所述,仅为本发明其中的较佳实施例而已,主要用来阐述实现原理,并非用来限制本发明的实施范围;即凡依本发明申请专利范围所作的均等变化与修饰,皆为本发明专利范围所涵盖。