·技术交流·
中文全文检索软件在商函处理系统中的应用
北京市邮政科学研究所 郑广顺
一、全文检索技术
商业信函处理系统中使用的检索技术是典型的非结构化模糊查询,这种查询不是关系型数据库的优点,而全文检索技术的出现使这一矛盾得以解决。全文检索就是以文本数据为主要处理对象,提供根据数据资料的内容(而不是外在特征)来实现的信息检索手段。“文海捞针”是对全文检索的形象描述。它是信息检索发展的最前沿和目前的最高阶段。衡量一个全文检索系统的主要技术指标:
·查全率:系统在进行某一检索时,检索出的相关资料量与系统资料库中相关资料总量的比率;
·查准率:系统在进行某一检索时,检索出的相关资料数量与检索出资料总量的比率。检索到的信息要准确、实用,既不能“漏查”,也不能“误查”;
·响应时间:又叫检索速度,是指从提交检索课题到查出资料结果所需的时间。对于动辄上1GB的海量全文数据来讲,检索速度至关重要。如果检索系统速度太慢,系统实用性就会大打折扣。最基本的检索速度是“千万汉字,秒级响应”;
·收录范围:指所查找的范围,只有收录范围全面,才能保证真正的查全;
·用户负担:指用户在检索过程中付出精力的总和;
·输出形式:系统检索出资料的形式,可能是资料号、记录、文摘或全文等。输出的信息越多且便于浏览,用户越容易作出相关性判断。输出形式影响用户对查准率的容忍限度。
利用全文检索技术可以解决传统商业信函处理系统中所面临的查询速度慢的问题。利用全文检索技术与数据库技术的有机结合,充分发挥数据库技术管理结构化数据、海量数据及网络化的优势,全文检索技术管理及检索非结构化的文本数据的优势,使得商业信函处理系统达到完美。
二、I-Search 中文全文检索软件
I-Search 中文全文检索软件作为数据库对非结构化数据检索的检索引擎。有如下优点:
·针对汉语自然语言的全文检索系统。具有中文自动分词,能同时支持中文整词与普通字符串检索,还能支持非精确匹配检索,检索结果作相关性排序;
·具有中文和英文两套索引,同时支持中文、英文整词检索;
·提供对GB、GBK、Big5、Unicode等内码的接口;
·具有超大文本数据管理能力。系统建库数量不限,每库中记录个数不限,每篇文章大小不限;
·多级层次数据分类结构。分类层次多达16层,使数据更易于存储、组织和使用;
·支持多种主流数据格式。I-Search2000系统对TXT、S2、PS2、PS、DOC、HTML、PDF等等主流数据格式都能够很好地支持;
·强大的智能检索能力。I-Search2000不但可以自动理解词意、产生联想、根据知识库进行推理,且具有革命性的机器自学习能力;
·更高的综合检索性能。采用“混合索引机制”,解决了“字索引”和“词索引”各自的不足。引进知识库和推理机机制,率先提出并实现智能检索,使I-Search 2000系统对查全率、查准率指标提出了新的更高的标准;
·检索速度快。I-Search 2000实现了超高速检索。1GB中文全文数据,100万条记录(文章),单机检索速度为0.233秒;
·检索手段丰富。提供国际流行的检索手段,如任意词检索、分类检索、日期检索、包含检索、模糊检索、联想检索、蕴涵检索、专题检索、历史检索、屏幕捕捉等多种检索方式。并且各种检索手段之间可以进行任意的与、或、非逻辑组合操作;
·具有编辑浏览功能。使用者可以方便地把目标文本信息进行多文档浏览,并可进行剪、贴、编辑;
·提供S2文件、PS2文件、PS文件等排版格式的还原处理。系统既可以根据排版文件还原成文本文件,也可以根据排版文件再现报刊的原版式风貌;
·可以管理多媒体信息。I-Search 2000系统不仅能在管理超大文本的同时直接管理图片、声音、活动影象等多媒体信息,而且提供超文本浏览的功能;
·可制作带全文检索功能的全文数据光盘;
·实现了与关系型数据库无缝对接,解决了数据安全、数据高度共享、并发访问、系统可扩展性等一系列问题。
三、商函处理系统中检索的实现
1. I-Search中文全文检索软件与关系型数据库的关系
I-Search中文全文检索软件与关系型数据库是“无缝对接”的关系。I-Search中文全文检索软件已与数据库紧密结合在一起而成为数据库的一部分,我们面对的仅仅是关系型数据库一个系统,而不面对全文检索系统。只有在发出了全文检索请求后,才由数据库对全文检索系统发出调用请求。我们所面对的是“带全文检索功能的关系型数据库”。数据的一致性、安全性、完整性、稳定性更有保障。
2.I-Search中文全文检索软件功能
I-Search中文全文检索软件与数据库无缝连接的实现主要是通过为数据库提供一系列的存储过程来实现的,这些存储过程分为两类。管理过程和检索过程为:
|
函 数 名 |
功 能 |
分 类 |
|
Newdomain |
对一个用户表创建一个全文检索库 |
管理过程 |
|
Deldomain |
删除已定义的全文检索域 |
管理过程 |
|
Addfromtable |
对用户表中的记录进行数据加载 |
管理过程 |
|
Deldata |
对用户表中的已加载记录进行删除 |
管理过程 |
|
Optimize |
全文数据优化 |
管理过程 |
|
Systemreset |
系统重置 |
管理过程 |
|
Gettlword |
取全文检索系统关联词库内容 |
管理过程 |
|
Addtlword |
加一组关联词 |
管理过程 |
|
Deltlword |
删除一个关联词 |
管理过程 |
|
Getznword |
取全文检索智能词领域词或下位词内容 |
管理过程 |
|
Addznword |
加一组智能词 |
管理过程 |
|
Delznword |
删除一个下位词或相关的词 |
管理过程 |
|
Search |
全文检索 |
检索过程 |
其中管理过程主要应用在数据库初始建立时使用,用于建立全文检索数据库与关系型数据库记录之间的关联,在编程过程中主要使用的是检索过程Search。 Search过程调用的参数为:
|
参数名称 |
参数类型 |
参数意义 |
|
DomainName |
字符串 |
检索域名称 |
|
SearchQuery |
字符串 |
查询请示串 |
|
PhBegin |
数字 |
需要返回的被命中记录的开始值 |
|
PhEnd |
数字 |
需要返回的被命中记录的结束值 |
|
ResultKeys |
字符串 |
返回的查询串 |
|
ISearch |
字符串 |
结果集字符串 |
|
Total-count |
数字 |
串库中总记录数 |
|
Hit-count |
数字 |
命中总记录数 |
| 返回值 | ||
|
Hit-count |
数字 |
成功:>=0 失败:<0 |
在编程过程中就是反复调用Search过程得到ResultPh值,在通过ResultPh值找到数据库中相应字段的内容。
3.商函数据库主要结构
商业信函处理系统与中文全文检索相关的企业库(QYK)库结构为:
|
序 号 |
字段名称 |
类 型 |
说 明 |
备 注 |
|
1 |
bh |
数字 |
编号 |
数据库主键 |
|
2 |
dwmc |
字符串 |
单位名称 |
全文检索字段 |
|
3 |
dwdz |
字符串 |
单位地址 |
全文检索字段 |
|
4 |
yzbm |
字符串 |
邮政编码 |
|
|
5 |
yzbm |
数字 |
行政区编号 |
|
|
6 |
xzqh |
字符串 |
企业代码 |
|
|
7 |
flh |
字符串 |
国民经济 行业代码 |
|
|
8 |
jjlx |
字符串 |
经济类型 |
|
|
9 |
jyfw |
字符串 |
经营范围 |
全文检索字段 |
|
10 |
zczc |
数字 |
注册资产 |
|
|
11 |
telephone |
字符串 |
电话号码 |
|
|
12 |
fax |
字符串 |
传真 |
|
|
13 |
qygm |
字符串 |
企业规模 |
|
|
14 |
|
字符串 |
电子信箱 |
|
|
15 |
www |
字符串 |
网址 |
|
|
16 |
postbox |
字符串 |
邮政信箱 |
|
|
17 |
isearch |
数字 |
全文检索 索引字段 |
其中单位名称、单位地址和经营范围为全文检索字段,其他为关系型字段。
4.商函检索流程及举例
<1> 用户通过应用程序界面输入检索条件,如检索“北京地区所有邮电局”。
<2> 应用程序将检索条件提交给数据库,行政区编号(qydm)为11(北京),单位名称(dwmc)包含“邮电局”。
<3> 通过分析知道,行政区编号为关系型字段,单位名称为全文检索字段
<4> 检索关系型字段,将结果存在临时表中。
<5> 检索全文检索字段,将结果存在临时表中。
<6> 两个临时表结果取交集,生成最终结果集。
<7> 将结果返回给用户。
数据库系统同时有三张临时表,分别用于存储关系检索结果(RELATION)、全文检索结果(FULLTEXT)和最终处理结果(FINAL),具体的数据库检索过程为:针对第4步,SQL语句为:SELECT BH FROM QYK WHERE QYDM=11 INTO TEMP RELATION;针对第5步,需要通过调用存储过程实现,其主要流程为:反复调用Search过程,将单位名称包含邮电局作为检索条件交由中文全文检索引擎检索,得到ISearch结果,通过ISearch再得到数据库主键BH,将BH值写入临时表FULLTEXT中;针对第6步,将RELATION表与FULLTEXT表作交集,结果存储到FINAL表中;针对第7步,将FINAL表与QYK表作连接操作,返回相应字段给用户。
5.检索条件的探讨
上面的例子只描述了一个关系型字段和一个全文检索字段,在实际应用过程中是远远不够的,而且在检索过程中使用了临时表,在数据量庞大时效率也会很低。在实际编程过程中,我们将检索条件作了分类处理,将其分为简单检索条件与复杂检索条件。
简单检索定义为关系型字段与全文检索字段的逻辑组合可以分离为数据库检索结果和全文检索结果的逻辑操作,如检索北京地区和上海地区的公司,并且经营范围为经营计算机及打印机,企业注册资金为100万元以上,上述检索可分离为数据库检索为行政区编号为北京或上海并且注册资金大于等于100万元,全文检索为单位名称包含公司并且经营范围包含计算机并且包含打印机。查询结果为两结果的交集。复杂条件定义为关系型字段与全文检索字段的逻辑组合不能分离为简单的数据库检索和全文检索,如检索北京地区的注册资金100万元以上的建筑企业或注册资金在30万元以上的装修单位,上述检索条件不能分离为数据库检索与全文检索结果的简单逻辑操作。
复杂条件的检索可以通过多步简单条件检索来实现,但在大规模数据处理时,如果应用临时表会造成效率很低,因此在对复杂条件的检索时我们改为将查询结果存储在操作系统文件中,再通过对文件的操作应用大内存管理及位映象技术得到查询结果集。
通过中文全文检索软件与数据库系统的有机结合,发挥数据库系统管理结构化数据的优势、中文全文检索在检索大文本数据上的优势,使得商业信函处理系统在查询千万条数据量时达到秒级响应,查询结果令人满意。■