文档检索(精选4篇)
文档检索 篇1
摘要:研究了基于图结构XML文档的关键字检索方法。根据图结构XML文档的结构特点, 结合用户输入的关键字及其类型, 建立了用户查询语义模型;定义了拥有完整语义信息的查询结果模型, 并从层次结构上分析来定义结果的语义相关性排序方案;提出基于语义的双层索引结构。实验结果表明, 算法具有较高的准确率和效率。
关键词:图结构XML,关键字检索,层次连接
目前基于关键字的XML信息检索研究大都采用将XML文档建模成树结构, 返回结果采用LCA的思想。当XML文档中出现引用关系时 (包括文档内引用IDREF和文档外引用XLink) , 将引用关系当作一般属性来对待会忽略元素节点之间的隐含关系, 采用LCA的思想得到的结果将有所遗漏。研究表明, 将带有引用关系的XML文档建模成图结构是可取的, 能够改善检索质量。本文的主要贡献可以归纳为如下4点:
(1) 提出从关键字及其类型来分析和预测用户查询语义的模型;
(2) 提出了基于语义的图结构XML文档的返回结果模型———层次连接实体 (HJE) ;
(3) 提出图结构XML文档下高效的双层索引结构;
(4) 设计了基于层次连接实体语义的HJ算法。
1问题描述和相关工作
1.1预备知识
在图结构XML信息检索中, XML文档被定义成有标签的有向图, Q={V, E}, 其中, V是文档的结点集, E是文档的边集。
结点集V是文档的信息存储单位, V={Element, Attribute, AttributeValue, Text}, 其中Element是元素结点集, Attribute是属性结点集, Attribute Value是属性值结点集, Text是文本结点集。元素结点可以嵌套元素结点、属性结点和文本结点, 属性结点可以嵌套属性值结点。
边集E是结点之间联系的桥梁, E={CE, RE}, 其中C是包含边集, R是引用边集。C (u, v) ∈CE, 表示u是v的祖先结点;R (u, v) ∈RE, 表示结点u有一条引用边指向结点v。
为了方便表述, V (n) 表示结点n本身, T (n) 表示以结点n为根节点的子树, Descendant (n) 表示T (n) 的结点集 (包括n本身) , CR (k, V (n) ) 关键字包含在结点n中, RE (n, m) 表示在T (n) 和T (m) 中存在一条引用边, 且引用边从T (n) 指向T (m) 。
1.2相关工作
基于图结构的XML文档信息检索研究包括XRank[1], EASE[2], XKeyword[3]等。XRank提出了ElemRank[1]概念, 对XML文档区别对待引用和属性, 在检索过程采用查找LCA (LowestCommonAncestor) [1]的思想, 以LCA为根节点的子树包含所有关键字为返回结果, 当关键字在两个距离较远的不同片段中, 由于不考虑引用, 其公共的LCA往往返回根结点或高层结点, 这将是冗余的或者无意义的。EASE构造了一个半径为R的Steiner[2]图 (rradiusSteinergraph) , 并认为Steiner图越紧凑, 相关度越大。这种方法采用TF-IDF[2]模型, 而这一模型相对在传统文本检索中比较有效, 处理图结构的XML文档, 引用关系会打乱原有层次结构, 导致最优的结果的相关性反而较低。XKeyword是一种可以在大型XML图数据库上进行关键字近似查询的方法, 但其对子图的划分运用到了文档的schema, 而很多XML是缺失schema的, 因此应用并不广泛
2 关键字的查询语义模型
基于关键字的信息检索中, 用户只输入了若干关键字K= (k1, k2, ..., km) , 因此如何从关键字中推断用户的检索目标将是一个首先要解决的难点。
目前的研究都是在寻找LCA时不区分关键字类型, 而在结果的权重中考虑关键字类型, 本文提出从检索结果之前就加入关键字类型的考虑, 来作为检索时的语义判断, 提出了“关键字语义唯一性”和“关键字语义选择”的理论。
推理依据1 (关键字语义唯一性) 在一个返回结果中, 每个关键字只会在一种类型上有语义。
结合用户输入的关键字与返回的正确结果进行分析发现, 用户输入的每个关键字都是对检索目标的直接体现, 不会存在模糊指向, 因此每个关键字在一个结果中仅会在一种类型上有指导意义;如果一个结果上某个关键字存在多层语义, 那么必然能将此结果拆分为两个独立结果。例如图1中输入检索关键字“open_auciton, Jack”, 那么检索结果将有两个, 第一个是以{T (person (0.1.1) ) }, 语义表示名字叫“Jack”的人感兴趣的“open_auction”列表;第二个结果是T (open_auction (0.0.0) ) ∪T (person (0.1.1) ) ∪R (V (0.0.0) , V (0.1.1) ) , 语义表示有“jack”参与的“open_auction”。第二个中虽然“open_auction”出现了两次, 但仅有{T (person (0.1.1) ) }中的“open_auction”具有语义, 其引用边是联系两个子树的桥梁。
推理依据2 (关键字语义选择) 当一个关键字在一个结果中存在于多个类型中, 关键字的语义在哪个类型上是个“语义选择”问题, 以下进行理论分析。
通过对相关结果的分析发现, 关键字出现在Attribute上时, 往往代表了用户需要查找这个属性上的属性值, 因此作为Attribute的关键字往往语义信息是最明确的。例如图1中, 输入检索关键字“mike, city”, “city”出现在属性上, 那么可以推断用户的信息需求是:名字叫“mike”的所在“city”的值;Element上关键字是对信息的高度凝缩, 拥有很高的信息量, 所以关键字出现在Element上时, 这个元素所代表的主题结点往往是与结果直接相关, 例如“open_auction”、“buyer”、“person”这些关键字出现时, 其结点往往就是检索目标的一部分。关键字出现在属性值, 其代表了用户查找的是属性值对应的属性所在的结点, 例如图1中用户输入“person, jack”, 可以推断用户的检索目标是找到“name”是“jack”的“person”结点的信息;文本结点一般作为其所在的主题结点的描述性信息, 重要性相对较低。
针对以上分析, 本文给出关键字语义选择:Q (Attribute) > Q (Element) > Q (Attribute Value) > Q (Text) , 这里的”>”代表了语义选择顺序。语义选择顺序将作为关键字在一个结果中的类型判断规则。
以上的两个推理依据可对输入的关键字进行语义判断, 从而推断用户需求。
3 查询结果的语义模型及排序方案
3.1 查询结果的语义模型
图结构XML文档中的引用边的出现使得检索过程与检索结果的语义分析都与传统的树结构检索方法有了根本性的改变。如果按照树结构的返回LCA方法来检索, 返回的往往是根结点或高层结点, 冗余度较高, 需要用户在“大”的结果中寻找自己感兴趣的部分, 这样的结果显然是不合理或缺少意义的。本文提出了以下几个语义, 来定义无冗余的、语义正确的结果模型。
定义1 (主题结点 Subject ) 一个可以区别于其他事物的独立信息单元。
主题结点为可返回结果的最小信息单位, S (E) 表示以结点E为根节点的主题结点。
S (root) ={T (root) |∃V (n) ∈Descendant (root) ∧∃k∈K, CR (k, V (n) ) }。
s∈S表示s为一个主题结点, S (k) 表示关键字k所在的主题结点。
例如图1中, T (person (0.1.0) ) 可以作为一个主题结点, 但T (watch (0.1.0.2) ) 不可以;T (watch (0.1.0.2) ) 附属于T (person (0.1.0) ) , 不能独立存在。主题结点可以嵌套, 同时主题结点只可能是元素结点。
下面给出是否为主题结点的判别条件:
判别条件1:如果一个结点的子结点包含元素结点, 那么以下几种情况可以判断此结点可以作为主题结点: (1) 子结点中仅有一个元素结点时, 还包含其他结点 (属性结点或者文本结点) ; (2) 子结点包含两个或两个以上元素结点时, 所有元素结点的标签名不完全相同。
判别条件2:如果子结点中不包括元素结点, 那么以下几种情况可以判断此结点可以作为主题结点: (1) 子结点仅有一个属性结点时, 还包含至少一个文本结点; (2) 子结点包含两个或两个以上属性结点。
定义2 (纽扣 Fastener) 连接主题结点的结点集合。F (s, t) ={m|m∈ (path (LCA (p, q) , p) ∪path (LCA (p, q) , q) ) ∧ (∀s∈S, ∀t∈S, ∃RE (s, p) ∧RE (t, q) ) }, 其中LCA (p, q) 为V (p) 和V (q) 的最小公共前缀[3], path (s, t) 表示s到t的路径上的所有结点, 包括s、t本身, f∈F表示f为一个纽扣。
纽扣是主题结点之间的关系的桥梁, 形式上不同于主题结点, 为分散的结点集合。
定义3 (层次连接实体 Hierarchical Joined Entity, HJE) 。 一个有完整语义信息的返回结果。层次连接实体HJE是图结构XML文档的检索返回结果模型, 包含一个或多个主题结点, 零个或多个纽扣, 每个关键字至少存在于某一个主题结点中, 如果把纽扣当成一个边的话, HJE是个DAG[2]子图。
HJE (K) ={S, F| (∀k∈K, ∃s∈S, CR (k, s) ) ∧ (∀f∈F, ∃s∈S, ∃s∈S, f=F (s, t) ) } (1)
w∈HJE表示w为一个层次连接实体, S (w) 表示层次连接实体w的主题结点集, F (w) 表示层次连接实体w的纽扣集合。
定义4 查询结果给定查询关键字K= (k1, k2, …, km) 以及一个XML文档D, 查询结果定义“无冗余的HJE”, Result (K) ={w∈HJE (K) |∀z∈HJE (K) , S (w) ⊄S (z) }。
查询结果Result (K) 包含了一系列的主题结点和纽扣, 主题结点集包含了所有的关键字, 并且不存在主题结点集的真子集包含所有关键字。
主题结点作为结果的主要信息载体, 包含了用户感兴趣的信息单元, 纽扣作为连接这些信息单元的“桥梁”, 这样查询结果语义信息完整, 且无冗余。
3.2 基于语义的排序方案
3.2.1 相关度影响因素
结合以上给出的关键字的查询语义分析和查询结果的模型定义, 已经可以对所有的相关结果进行语义描述, 本文接下来将对影响返回结果的相关度因素进行阐述。
(1) 层次嵌套
关键字之间的层次嵌套关系对结果相关度影响最大。
多关键字的“层次嵌套”关系是指“关键字之间的直接嵌套或者间接嵌套”。直接嵌套是两个关键字之间的关系, 指的是在同一个主题结点内两个关键字所在的层次是祖先-子孙关系。间接嵌套是主题结点之间的关系, 关键字所在的主题结点被另一个主题结点引用。
下面给出层次嵌套对一个结果的Rank值计算公式:
式 (2) 中ki, kj是关键字, D代表直接嵌套, I代表间接嵌套, d () 函数是关键字所在层次之间的距离, f () 函数是关键字引用的最短距离。h1, h2是参数。
(2) 层次方向
关键字存在层次嵌套时, 层次之间的方向对结果的相关度有影响。
下面给出层次方向对一个结果Rank值的计算公式:
式 (2) 中u为一个查询结果, O (s) 表示主题结点s的出度, I (s) 表示主题结点s的入度。p1, p2为参数。
3.2.2 相关度模型
通过以上分析, 我们给出返回结果的相关度的计算公式
式 (3) 中u为一个查询结果, R (u) 为相关度。α, β为参数。
4 基于语义的双层索引结构
XML文档的关键字检索方法不同于在原文档上进行查询的结构检索方法, 采用将文档解析后存入数据库中, 检索时从数据库中查询关键字, 来构造结果。目前主流的检索方法的索引结构使用Dewey[4]编码进行构建, 每个关键字有唯一的Dewey码, 另外还包括层次、类型或者其他信息。
本文针对图结构XML文档的独特结构, 不仅构建了基于主题结点的Dewey索引表 (主表) , 还构建了用于记录引用关系的Refer索引表 (副表) , 形成了双层索引结构。
在主表Dewey索引表中, 记录了必要的Dewey码、关键字、类型、所属主题结点Dewey码;在Refer索引表中, 记录了引用主题结点Dewey码、被引用主题结点Dewey码。例如图1中, “mike (0.1.1.1.0) ”结点在Dewey表中存储形式为{0.1.1.1.0, mike, 4, 0.1.1}, 其中第4项为关键字所在的主题结点S (person (0.1.1) ) 的根节点Dewey码。主题结点open_auction (0.0.0) 的子结点seller引用了主题结点person (0.1.1) , 在Refer表中记录为{0.0.0, 0.1.1}。
双层索引结构完整记录了图结构XML文档的信息, 在检索过程中通过调用主表找到关键字的信息, 通过调用副表找到关键字所在主题结点的引用信息及被引用信息, 来为检索提供足够的语义信息。
5 算法实现与实验分析
5.1 层次连接 (HJ) 算法
HJ算法的实现, 是基于用户提供N个检索关键字, 找到所有的相关结果片段, 并按照相关度进行排序。
算法1描述了HJ算法的查询过程, keyword [m]表示用户输入的m个关键字 (Line 1—2) 。invert[m]存储了经预处理的m个关键字对应的主题结点列表 (Line 3—4) 。每一个主题结点列表的组合都可能产生一个结果, 根据关键字的查询语义对一个组合进行语义选择, 产生候选主题结点列表singleList[n] (Line 5—8) 。遍历组合中的任意两个主题结点, 进行层次连接, 寻找产生的DAG子图 (Line 9—14) 。对结果进行清理和筛选是边计算边处理的 (Line 15—20) 。最后根据3.2节的排序方案进行排序输出 (Line 21—25) 。
5.2 实验环境
实验数据:华盛顿大学的XML数据仓库中XMARK以及IMDB数据集, 数据集大小分别为10 MB, 121 MB。手动选择8组Query进行测试。
实验硬件环境:CPU:AMD双核2.8 MHz;内存:2 G;操作系统:Windows 7;数据库:MYSQL 5.2。所有的算法用java语言实现。
5.3 查询质量
图3显示出Top-20的XRank[1]和HJ算法的检索质量比较。由于某类关键字组合涉及较多引用关系, 如QX6、QX7, 在XRank上的结果返回为空。
6 总结与研究展望
基于关键字的图结构XML文档上的检索带来了新的挑战, 本文试图通过对关键字的语义分析, 构建基于语义的结果模型进行探索, 从层次结构上分析结果的相关性。实验表明:与主流模型相比, 本模型在查询质量上有明显的优势。
参考文献
[1] Lin G, Feng S, Chavdar B, et al.XRank:ranked keyword search overXML documents.SIGMOD, 2003:16—27
[2] Guoliang L, Beng C O, Jianhua F, et al.EASE:an effective 3-in-1keyword search method for unstructured, semi-structured and struc-tured data.SIGMOD, 2008:903—914
[3] Vagelis H, Yannis P, Andrey B, et al.Keyword proximity search onXML graphs.ICDE Conference, 2003:367—378
[4]孔令波, 唐世渭, 杨冬青, 等.XML数据索引技术.软件学报, 2005;16 (12) :2063—2079
文档检索 篇2
作者采用基于字表法的索引库结构, 结合具体应用, 研究全文检索字索引技术细节, 包括索引的组织、压缩及检索等技术, 并介绍一个实用的中文Web文档全文检索系统的结构及实现。
1 字索引系统基本设计
1.1 字表的组织及检索策略
字表法索引库的主要部分是每个字的字表信息。在本系统中, 位置采用字符相对于文档头的偏移字符数表示, 而不按通常情况采用相对于文档头的偏移字节数, 这样可以大大减小位置的数值大小, 有利于进一步采用压缩技术。建立字表索引时, 需要扫描整个源文档, 对出现的每一个有效字符, 计算其在文档中出现的位置, 并将该位置的值加入到对应的字表中。
1.2 索引库结构
系统处理的对象是大量的HTML文档。在索引数据库中包含多个HTML文档的相关信息及每个HTML文档的基本信息, 如标题、文档编号、存放路径等。检索时根据找到的符合条件的文档编号, 可以获得相应Web文档的基本信息。
字表是索引库中最主要的部分, 在每个汉字字符对应的字表中, 包含该字符出现在所有文档中的全部位置。为了区分每个位置值属于哪个文档, 每个字符的字表被分为多个字表段, 每段都对应一个文档, 记录该字符在此文档中的出现位置。
1.3 字表压缩算法
由于全文检索系统通常处理的数据量很大, 经过处理生成的索引数据也很大, 所以采用一定的压缩策略, 可以节约存储空间。另外, 全文检索系统执行检索时, 通常需要读取一定的索引数据采用压缩技术, 可以减少读取数据所需的I/O时间, 从而有可能提高检索速度。索引压缩技术的使用, 能够减少索引数据占用的磁盘空间, 同时应不降低检索速度。
1.4 单词检索算法
单词的检索算法是全文检索中的最基本功能。在字表中查询单词时, 先将检索串分解成一个个独立的汉字或ASCII字符, 假设该串中包含的字符总数为n, 该字符序列为C1, C2, …, Cn, 每一个字符Ci相对于检索串首部的偏移值为Oi, 对应的字表为Ti。每个字表Ti由多个字表段组成, 第j个字表段Mij中记录了字符Ci在第j个文档中的所有出现位置。
2 中文We b文档检索系统结构
本系统主要用于局域网, 可以实现对指定的互联网站点进行检索。系统分为前端和后端两部分, 前端向客户提供检索服务, 后端获取Web文档, 并建立和更新索引。
2.1 页面获取
根据HTTP协议发送相关网页抓取信息, 从相应的站点获取所需要的网页或页面相关特征信息。页面的获取遵从Robot访问规范, 根据robot。txt中的内容确定相关站点可以检索的页面范围。页面的基本信息如URL、标题等存放于关系数据库中。所获取的页面提交给索引创建程序处理, 同时这些Web文档经压缩存放于特定的目录下。网页的获取采用多线程技术, 可以同时获取某个站点的多个网页, 并同时考虑对该站点的访问频度, 尽可能减少对该站点的影响。系统按照一定的策略实现网页的自动更新, 并会重新建立索引。
2.2 索引建立
从网站上获取的初始信息都是以Web页面的形式存在, 页面是HTML语言的格式, 包含标记和文本。在索引的建立过程中, 首先去除HTML文档中的标记, 只对文本内容建立字索引。
2.3 用户查询
在实用的全文检索应用系统中, 除了提供最基本的单词检索功能外, 还要支持一些高级检索功能, 以方便实际的信息查询。本系统支持逻辑组合检索, 多个检索字符串可以按照一定的逻辑运算关系组合在一起形成组合检索。目前系统支持“与”、“或”、“非”三种基本的逻辑运算关系, 它们可以和括号组成复杂的检索逻辑表达式。检索时, 首先分析检索逻辑表达式, 对遇到的检索字符串进行检索, 并根据逻辑关系, 结合已经得到的中间结果对检索的范围进行优化, 处理结束后, 将得到符合条件的所有记录。
2.4 性能测试
当前服务器采用的操作系统是Windows NT4.0, 内存128MB, 处理器PentinumⅢ450。由于网络延迟时间较长, 所以获取网页所需的时间较多。当前处理几个网站的数据, 去除网页中的标记后数据的大小为186MB, 包含136 289篇中短长度的文档。使用内存映射文件和多个临时文件, 建立索引需要3.6h, 远远小于基本的索引建立方法所需的时间19.9h, 大大缩短了索引的创建时间。实现字节对齐方法比较简单, 并且可以达到较好的压缩效果。未压缩的索引文件的大小为317Mb, 压缩后索引文件为174Mb。索引创建过程中针对临时文件中的数据也可以使用该压缩方法, 临时文件初始占用的空间为432Mb, 压缩后占用的空间为286Mb。索引的压缩减少了索引数据所占用的磁盘空间, 但也会增加解压的时间, 系统采用的压缩方法解压缩的速度比较快。在测试中, 选取了大量的查询词, 并对压缩索引和未压缩索引的检索时间做了比较。实验表明, 采用该压缩技术, 可以有效地加快检索时间, 当检索时需要读入的索引数据较多时, 速度提高更明显。采用压缩技术, 单个单词的检索时间一般在1s之内, 具有较好的响应速度。
由于系统采用逐个字符精确匹配的查询方法, 所以不存在查全率的问题, 只要源文档包含检索字符串, 必然出现在结果集中。结果集中也可能包括与检索请求毫不相干的文档, 即发生多检的情况, 可以通过降低用户的检索字符串的歧义性提高查准率。
3 结论
在分析实际需求的基础上, 研究了字表法全文检索的主要技术, 并实现了一个中文Web文档的全文检索系统。测试和使用表明, 该系统各项性能均比较良好, 具有一定的实用性。作者还将继续研究全文检索的有关技术, 并进一步优化系统的检索性能。
摘要:为解决在检索某些词时发生漏检或错检, 以及查全率和查准率不高的问题, 研究字索引技术在中文Web文档检索中的应用。着重讨论字索引组织结构和检索方法, 并引入了字节对齐的索引压缩方法, 最后描述了一个中文Web文档全文检索系统的结构和实现。测试表明, 该系统在响应时间和查准率方面性能均比较好, 具有一定的实用性。
关键词:全文检索,Web文档,字索引,压缩算法
参考文献
[1]杨文清, 黄宜华, 张福炎.中文Web文档库全文检索技术研究与实现[J].中文信息学报, 1999, 13 (4) :49-56.
文档检索 篇3
目前, PowerPoint (以下简称PPT) 被广泛应用于院校、机关、企事业单位等多个领域的教学、演示工作, 并发挥着重要的作用。PPT容易上手, 方便操作, 但制作一件内容丰富、图文并茂、样式美观的优秀作品却费时费力, 往往需花费数天甚至数周的时间。开发软件工具, 充分利用目前成熟的计算机信息检索和媒体资源管理技术实现PPT演示文档自动生成, 能够为PPT的使用者提供极大的方便。
总体构思
要实现PPT演示文档的自动生成, 首先需对制作文稿进行初级解析, 确定各级标题、自然段及自然句, 组合成为初始分页, 将初始分页自动套入事先定义好的PPT模版;其次对初始分页中的正文进行二级解析, 提取关键词, 依据该关键词搜索、拾取媒体资源库中的图片素材, 计算版面空间, 将这些图片合理布设到PPT的空白位置, 实现PPT的图文混排, 最终生成PPT演示文档, 供用户直接使用或进一步修改完善。方案原理示意图如图1。
1.制作、整理关键词库
合理选择关键词并科学编目建库是本方案最终实现的基础和先决条件。用户制作PPT演示文稿针对各自行业, 题材固定, 内容明确。应针对本行业建立相应关键词词库, 并进行合理优化, 以缩小搜索范围, 提高使用效率。关键词的来源多种多样, 目前可以在网上方便查找一般行业的关键词词库;对于一些特殊行业关键词库可以利用软件通过对行业日常公文、报告的推测获得。
2.利用关键词对图片素材进行编目标注, 建立媒体资源库
利用本方案自动生成后的演示文稿, 其内容的丰富程度是由可以搜索到的图片资源数量决定的。网上的图片资源较多, 可以通过关键词方便地搜索、下载, 但是利用软件自动批量拾取比较困难。应该充分利用单位现有媒体资源管理系统或者建立一个本地图片资源库, 并利用关键词库对其进行标注、编目。在使用中利用关键字比对的方法实现自动搜索、拾取。
如果无法获得大量的图片资源供搜索使用, 也可以利用有限的背景底图生成几乎同样效果的演示文档。背景底图是指没有明显指向, 不针对某个具体关键字, 但能够呼应主题、烘托氛围、提示内容的图片。底图背景一般可由对优秀的美术、摄影作品进行适当降低透明度或透明度渐变处理得到。利用软件自动生成PPT演示文稿, 应将背景底图作为一种特殊的图片资源进行积累和管理。
3.制作PPT模版库
PPT模版决定了PPT演示文稿的格式和艺术性。互联网提供了大量优秀的PPT模版, 要利用这些资源, 首先应对其进行严格规范。规范的内容包含样式和规格两个方面, 其中样式涵盖配色、装饰、构图、底图等要素;而规格包含标题、正文字体、字号, 图片大小、布设位置等要素。另外, 应充分考虑PPT模版应用的灵活性和适应性。比如, 不同的文稿中标题文字字数差别很大, 为避免套入模版时过长文字发生溢出现象, 应对文字段落格式的相应选项进行设置。
同时, 软件应具有PPT模版库查询预览功能, 模版库按照文档内容、演示规格以及艺术特点等项内容进行整理、分类, 以方便用户根据具体情况和个人喜好查阅调用。
4.对制作文档的解析、拆分 (如图2)
用于制作演示文稿的文档一般由Word软件编辑完成, 将Word文档转为PPT演示文稿原本十分方便快捷, 但要利用这项功能要求用户严格套用Word软件的版式设计, 而我们在使用Word软件时往往缺乏这种习惯;另外还有一些文档来自其他文字编辑软件或者直接复制粘贴得到。软件应首先对这些文档进行去格式化处理, 再进行解析与分切。以换行符分割为自然段, 以句号、感叹号等为隔断分切为自然句, 依照标题与层次格式、体例编排确定各级标题。通过分析句子的起始字符确定句子的类型, 如根据传统编排法, 遇到“一、”、“二、”起始的句子可以定为一级标题, 遇到“ (一) ”、“ (二) ”起始的句子定为二级标题, 以此类推。其他编排方法同样照此处理。对于无任何标题内容匹配的句子则定义为正文。
将每句正文以及所对应的各级标题组合成为初始分页, 用于生成演示文稿的单个演示页面。
5.查询关键词, 拾取相应图片
将正文与关键词库内容逐条比对, 提取该正文中包含的关键词, 以此作为图片资源拾取依据。如果该段正文中关键词较多, 应按照关键词出现频率或主次顺序适当删减, 保证最终添加到演示文档页面中的图片数量不超过4个;如未提取到关键词, 或者关键词未能查询到相应图片, 为避免演示页面出现图片空缺, 应从底图背景库中选择适当底图图片作为页面背景, 以对画面内容进行补充。选择的依据可以是段落关键词、上一页关键词等, 或者采用手工选取的方式完成。
6.套用模版自动生成PPT文档
初始分页中的文字和图片内容确定后, 便可套入选定的PPT模版, 其中标题及正文内容较为固定, 方便套用;而图片内容因为数量、规格无法预知, 应将版面剩余空间、留空, 图片数量、尺寸等作为变量, 利用相应计算公式得出图片具体布放位置和搭接方式。
目前微软公司针对Vi s ual Studio.net提供了Office软件函数库用于二次开发, 如利用C#等软件进行编程时应首先调用Microsoft PowerPoint对象库, 并引用相关COM组件。具体可参考微软网站 (HOWTO:在Visual C#.NET中使用自动化创建并显示PowerPoint演示文稿) 。
结束语
PPT演示文档的制作工作充满艺术性, 利用计算机软件进行自动设计目前只能说是处于起步阶段。但经过探索和实践, 目前已能够利用软件在短短几分钟内将一篇数千字文稿解析、分切, 制作出样式美观、内容较为丰富、图文并茂的PPT演示文档初稿, 为后续的艺术加工节省下大量时间。
相信随着计算机视频媒体资源管理系统功能的日益完善, 利用更大规模的全文搜索及信息提取技术对电视制作脚本进行解析, 并进而实现视频节目的自动初编同样具有技术可行性。
参考文献
[1]罗刚.使用C#开发搜索引擎[M].北京:清华大学出版社, 2012.
文档检索 篇4
在当今飞速发展的信息社会,信息检索占据了越来越重要的地位。人们在每天的日常工作生活中都要花费大量时间进行信息的检索,科研工作者往往需要超过一半的时间和精力用于获取和搜索其关心的信息。因此,信息检索的效率很大程度上决定了他们的工作效率。
如今,网络检索技术发展迅速,功能越来越强,但对本机存储文件检索的能力却相对滞后。人们经常将大量感兴趣的文件下载到本机上,但是时间一久就很难再找到。传统的检索工具只能局限于对文本类型文件的关键词检索,如Windows系统自带的搜索工具。但对日常办公经常使用的Microsoft Office这类结构复杂的二进制格式文档,却没有一种通用的、简便的检索方法,因此用户不得不花费大量精力进行手工检索。
百度推出的“百度硬盘检索”虽然能力很强,但是首先需要花费大量时间在硬盘上建立一个庞大的索引库并一直维护它,一旦没有及时更新,检索结果就可能不准确,而且它不能对移动存储设备上的文件进行检索。那么有没有一种简单通用的方法,能对存放在任何地方的多种版本的Office文档进行关键词的检索呢?本人经过大量研究实践发现是完全可能的,这就是利用Automation和动态加载技术。该方法相对于传统检索方法有以下三个优点:
1) 检索准确性高
本方法基于Automation技术直接使用本机的Microsoft Office环境进行检索,可以充分利用其强大功能,具有极高的准确性。
2) 版本兼容能力强
本法采用动态加载技术,动态调用本机的Office环境进行检索,相比传统的静态绑定调用方法具有更好的版本兼容性。
3) 扩展性好
采用Automation技术进行检索,具有很好的通用性,可以扩展到对其它类型文档进行检索。
1 Automation和动态加载技术原理
Automation即自动化技术,它基于COM(Component Object Model)组件对象模型,它采用三层架构模型运行,如图1所示。
用户服务层处理信息的表示问题,并与用户进行交互。业务服务层提供应用程序的大部分功能,进行大量的具体处理,并且实施应用程序的业务规则,业务逻辑上,在客户环境和数据服务层之间架起了一座桥梁。数据服务层由不同存储种类的数据和文件组成[1]。
COM的三层架构比起传统的两层架构——客户端/服务器模型,可以对业务应用程序做更灵活多样的配置,提供更强大的功能,具有更好的可扩展性。
很多应用软件中都支持自动化技术,如Microsoft Word、Excel、PowerPoint、Access、IE等,几乎所有的Windows开发环境都对自动化提供支持。自动化技术还有一个特点,它允许向外公开应用程序的很多功能,在其他应用程序中把其当作组件调用。本文正是利用了Automation技术的这些特点,通过编写一个用户接口程序,将Office应用程序作为业务服务层运行并对其控制,实现对Office类型文档的检索。其实现拓扑结构图如图2所示。
动态加载技术采用后绑定方式运行,在程序运行时再动态加载本机上的程序或动态链接库,并查询、调用所需的接口函数。而静态绑定技术采用前绑定方式运行,在程序编译时就将某个固定Lib库中的接口预先链接到执行程序中。因此动态加载技术具有很好的通用性。
2 实现对Word文档的关键词检索
众所周知,对Word文档最准确的检索方法就是直接使用Word程序进行查找,使用其它工具都可能会因为兼容性、版本、格式等问题造成偏差。本文利用Automation技术,直接使用本机上的Word环境进行检索,从而实现准确的定位和查找。同时,本文采用动态加载技术,在程序执行时动态加载Office的接口方法,避免了版本不兼容的发生。
本检索方法主要由三部分组成:1)初始化和动态加载Word应用环境;2)对指定Word类型文件进行关键词的检索;3)退出Word环境。其程序流程拓扑结构图如图3所示。
本程序使用Visual C++6.0环境开发,在Word 97、Word 2000、Word XP和Word 2003下测试通过。
首先声明要使用的头文件和全局变量指针[2]:
#include <afx.h>
#include <ole2.h>
IUnknown *pWordUnk;
IDispatch *pWordDispApp,*pWordDispDocs,
…;
DISPID dispid_Word_Docs,
dispid_Word_Open,…;
1) 初始化和动态加载Word应用环境
void InitWordEnvironment()
{
::CoInitialize(NULL);
CLSIDFromProgID(L″Word.Application″,&clsid);
::CoCreateInstance(clsid,NULL,CLSCTX_SERVER,IID_IUnknown,(void**) &pWordUnk);
pWordUnk->QueryInterface(IID_IDispatch,(void**)&pWordDispApp);
szFunction = OLESTR(″Documents″);
pWordDispApp->GetIDsOfNames(IID_NULL,&szFunction,1,LOCALE_USER_DEFAULT,&dispid_Word_Docs);
pWordDispApp->Invoke (dispid_Word_Docs,IID_NULL,LOCALE_USER_DEFAULT,DISPATCH_PROPERTYGET,&dpNoArgs,&vResult,&excep,NULL);
pWordDispDocs = vResult.pdispVal;
szFunction = OLESTR(″Open″);
pWordDispDocs->GetIDsOfNames(IID_NULL,&szFunction,1,LOCALE_USER_DEFAULT,&dispid_Word_Open);
szFunction = OLESTR(″Quit″);
hr=pWordDispApp->GetIDsOfNames(…,&dispid_Word_Quit);
}
说明:首先初始化Automation环境,然后根据“Word.Application”名称取得本机上Word应用程序的clsid,再根据clsid动态加载创建Word应用程序实例作为业务服务层运行,自身作为用户服务层运行并对其进行控制。首先查询业务服务层接口存放到pWordUnk,再查询Application接口pWordDispApp,并得到Application接口下的Documents属性的指针pWordDispDocs,最后获取Open和Quit方法的ID号dispid_Word_Open和dispid_Word_Quit。
2) 对指定Word类型文件进行关键词检索
检索函数的输入参数为要查找的Word文件全路径名称和要查找的字符串,要求都为Unicode格式编码的字符串。返回结果:1表示在文件中找到了指定字符串;0表示没有找到。
int MainDocSearch(WCHAR*wstrFilename,WCHAR *wstrFind)
{
VARIANT vArgsOpen[1];
DISPPARAMS dpOpen;
dpOpen.cArgs=1;
dpOpen.cNamedArgs=0;
dpOpen.rgvarg=vArgsOpen;
vArgsOpen[0].vt = VT_BSTR;
vArgsOpen[0].bstrVal=wstrFilename;
pWordDispDocs->Invoke(dispid_Word_Open,IID_NULL,LOCALE_USER_DEFAULT,DISPATCH_METHOD,&dpOpen,NULL,&excep,NULL);
szFunction=OLESTR(″ActiveDocument″);
pWordDispApp->GetIDsOfNames(IID_NULL,&szFunction,1,LOCALE_USER_DEFAULT,&dispid_Word_ActiveDoc);
pWordDispApp->Invoke(dispid_Word_ActiveDoc,IID_NULL,LOCALE_USER_DEFAULT,DISPATCH_PROPERTYGET,&dpNoArgs,&vResult,&excep,NULL);
pWordDispActiveDoc=vResult.pdispVal;
szFunction=OLESTR(″Content″);
pWordDispActiveDoc->GetIDsOfNames(…,&dispid_Word_Content);
pWordDispActiveDoc->Invoke(dispid_Word_Content,…);
pWordDispContent=vResult.pdispVal;
szFunction=OLESTR(″Find″);
pWordDispContent->GetIDsOfNames(…,&dispid_Word_Find);
pWordDispContent->Invoke(dispid_Word_Find,…);
pWordDispFind=vResult.pdispVal;
szFunction=OLESTR(″Execute″);
pWordDispFind->GetIDsOfNames(…,&dispid_Word_Execute);
VARIANT vArgsFindText[1];
DISPPARAMS dpFindText;
vArgsFindText [0].vt = VT_BSTR;
vArgsFindText [0].bstrVal = wstrFind;
dpFindText.cArgs=1;
dpFindText.cNamedArgs=0;
dpFindText.rgvarg=vArgsFindText;
pWordDispFind->Invoke(dispid_Word_Execute,IID_NULL,LOCALE_USER_DEFAULT,DISPATCH_METHOD,&dpFindText,&vResult,&excep,NULL);
if(vResult.bVal != FALSE)
iret=1;
else
iret=0;
pWordDispFind->Release();
pWordDispContent->Release();
szFunction = OLESTR(″Close″);
pWordDispActiveDoc->GetIDsOfNames(…,&dispid_Word_Close);
pWordDispActiveDoc->Invoke(dispid_Word_Close,…);
pWordDispActiveDoc->Release();
return iret;
}
说明:动态获取Open方法指针并调用打开要检索的Word文档,然后查询获取当前活动文档指针,接着依次动态取得Content、Find和Execute的方法指针,执行Execute方法查找指定字符串操作。若查找到指定字符串返回1,否则返回0,最后释放本函数中使用的指针,关闭当前打开的Word活动文档并退出。
只要对上面程序稍加修改,就可以实现对多种检索条件的复合检索。
3) 退出Word环境
void ExitWordEnvironment()
{
pWordDispApp->Invoke(dispid_Word_Quit,…);
pWordDispActiveDoc->Release();
pWordDispDocs->Release();
pWordDispApp->Release();
pWordUnk->Release();
::CoUninitialize();
}
说明:调用Quit方法关闭Word服务器端,释放使用过的指针,最后退出Automation环境。
3对Excel、PowerPoint类型文件进行关键词检索
1) 初始化和动态加载Excel、PowerPoint应用环境
说明:与初始化Word环境类似,只是改为根据“Excel.Application”或“PowerPoint.Application”名称取得应用程序的clsid,再根据clsid动态加载创建Excel或PowerPoint实例作为业务服务层运行。
2) 对指定Excel或PowerPoint类型文件进行关键词检索
说明:Excel文档与Word不同,它可以包含多个表单,需要对所有表单依次检索。因此,需要首先得到表单组的指针Worksheets和表单数Count,然后依次对各个表单进行检索,分别获得Worksheets下Item、Cells和Find指针,并执行Find查找指定的字符串。
PowerPoint文档是由多张幻灯片Slide组成,需要首先获得Slide组的指针Slides,然后得到幻灯片数量Count,再依次对每张幻灯片进行处理。每张幻灯片又是由多个Shapes项组成,需要分别对其进行检索。
3) 退出Excel、PowerPoint环境
说明:与退出Word环境类似,关闭Excel或PowerPoint服务器,释放使用过的指针,最后退出Automation环境。
4 小 结
以上介绍了利用自动化和动态加载技术实现对Office中常用的Word、Excel和PowerPoint三类文档进行关键词检索的方法。受篇幅所限,没有对函数调用中异常错误信息进行处理。这种检索方法的优点是查找非常准确,版本兼容能力强,扩展性好。另外,只要对上面的程序稍作修改,还可以实现对WPS、Access和Pdf等类型文档进行检索。本方法的不足就是检索速度较慢,有待近一步提高。
以上只是利用Automation实现了关键词的检索,该技术功能十分强大,还有很多其它特性没有介绍,如果能够充分利用它,将会使我们的工作达到事半功倍的效果。
参考文献
[1]David Iseminger.COM+程序员指南.北京:机械工业出版社,2002.
[2]David J Kruglinski,Scot Wingo George Shepherd.Visual C++6.0技术内幕.第五版.北京:Microsoft Press,1999.
[3]Ash Rofail,Yasser Shohoud.COM与COM+从入门到精通.北京:电子工业出版社,2000.