科技查新报告自动生成软件的设计与实现
李广利, 李书宁
北京师范大学图书馆 北京100875
摘要
查新报告的模式和格式相对固定, 根据此特征, 设计查新报告生成软件, 以实现自动化生成查新报告。从功能需求方面进行分析, 提出软件的总体设计, 以C#作为开发语言, 在Visual Studio环境下可视化开发, 并对具体实现的界面、文档和代码进行详细描述, 实现文本自动按标准格式生成、检索词自动提取、数据库直接勾选生成等功能, 从而提高查新员的工作效率和报告质量。
关键词: 科技查新; 自动化生成; 查新报告; C#
Design and Implementation of the Software to Auto-generate Sci-tech Novelty Search Report
Li Guangli, Li Shuning
Beijing Normal University Library, Beijing 100875, China
Abstract
According to the model and format of sci-tech novelty search report, the authors design the software to generate sci-tech novelty search report automatically. Based on analyzing the function demand, the paper puts forward the general design of the software, using C# in the Visual Studio environment. And the realization of interface, documentation, and codes are described in detail. The software improves the efficiency of the sci-tech novelty search, by the functions such as text automatic generation according to the standard format, search terms automatic extraction, database directly selection, etc.
Keyword: Sci-tech novelty search; Automatic generation; Novelty search report; C#
1 引 言

科技查新 (简称查新) , 是指具有查新业务资质的查新机构根据查新委托人提供的需要查证其新颖性的科学技术内容, 按照《科技查新规范》 (国科发计字[2000]544号) 进行操作, 并做出结论 (查新报告)[ 1]。查新咨询服务的结果是为被查课题出具一份查新报告, 因此, 查新员在前期工作完成后, 撰写查新报告是必不可少的一项工作。撰写报告需要按照规定格式填入查新结果和项目其他信息, 是一项重复性较高、耗费时间较多的工作。每当遇到大量课题时期, 查新站往往需要加派人手、加班加点, 查新员在长时间工作后思维速度和准确性难免下降; 有些信息在报告中出现多次, 人工填写或修改时, 可能会发生漏改或前后不一致。因此, 史新辉[ 2]提出了查新工作新模式的构想, 其中包括自动化生成查新报告, 但仅提到设想, 并没有从技术上实现。已有的科技查新系统 (如: 浙江大学图书馆“文献检索与科技查新服务平台”[ 3]、中国科学院国家科学图书馆“科技查新检索服务平台”[ 4]、江苏大学的“科技查新信息管理系统”[ 5]) 多侧重于网上接受查新课题申请、课题进度查询、课题信息统计等功能, 对查新报告自动生成的功能涉及不多。因此, 为提高查新员的工作效率和报告质量, 笔者设计开发了自动生成软件以实现自动化生成查新报告。

软件开发离不开对软件中技术因素的考虑, 技术上是否可行关系到系统能否成功实现。目前, 利用软件工具实现对Word文档操作的方法很多, 可使用官方提供的API, 也可以使用第三方控件等[ 6, 7, 8], 采用的程序设计语言有VC++、VBA、VB等, 相关技术比较成熟, 具有底层功能封装、用户接口易用、鲁棒性好等优点。因此, 开发设计该软件实现自动化生成查新报告从技术方面是可行的。

2 查新报告自动生成软件的需求分析

科技查新报告自动生成软件要实现的是按照规定的格式和内容要求自动化生成符合要求的科技查新报告。科技查新报告主要由科技查新结果、查新项目相关信息、查新报告相关规范信息等共同组成。结合对已有系统调研和查新工作中实际需求的分析, 笔者设计了软件开发流程图, 如图1所示:

图1 查新报告自动生成软件使用过程图

.

模拟软件正常使用的工作过程为: 创建项目→录入/选择项目信息→生成报告。软件开发具体需要满足如下4个方面的实践需求:

(1) 软件应提供友好的用户界面, 查新员将查新结果填入软件, 之后由软件依据设计好的模板格式自动生成Word查新报告, 不再需要人为调整字体、段落等格式。报告模板和默认信息配置完成后, 可重复使用并可多人共享。查新结论部分的引用文档应为上标格式。

(2) 项目信息等内容由软件提供默认值、备选项。这些默认值和备选项由查新员录入, 新建项目时直接填充为默认值。每位查新员可自定义报告内容的常用默认值, 以达到尽量减少修改操作、提高工作效率的目的。报告中多次出现的其他内容, 也只需要在软件中填写一次, 由软件自动填充至报告相应位置。

(3) 针对查新目的、检索范围等有较为固定备选项的内容以及各个日期字段, 软件应提供选择接口, 通过鼠标点击或键盘热键选取, 以节省输入时间, 同时可避免文字错误。软件也应提供从检索式中提取检索词的功能, 所需分隔符可由用户设置。另外, 软件还应该提供列表项目的自动编号等功能, 进一步降低重复性、技术含量低的劳动。

(4) 为方便查新结果随时保存、传递、共享、复用等, 软件提供科技查新报告的保存和打开等功能, 需要修改的信息直接呈现在界面中。

3 查新报告自动生成软件的设计
3.1 软件的概要设计

该软件提供一个图形化用户界面, 界面由报告首页、查新委托信息、文献检索范围、检索策略、检索结果、查新结论及附件组成, 完全由用户用鼠标和键盘进行交互操作。软件总体上采用多级别控制内容信息, 力求最大限度地减少重复工作, 降低查新员的工作量。根据信息的固定程度, 各级别信息及其控制方法分别是:

(1) 完全固定信息: 针对基本不会发生变更的内容, 固化于软件内部, 变更则需修改系统代码, 如: 查新报告需要的固定字段;

(2) 偶然变动的信息: 查新报告中偶尔会发生变动的内容, 使用Word模板实现, 可对报告格式进行修改、增删固定文字, 或某些字段调整位置或字体格式, 均不影响软件使用; 如需修改, 只需要替换新模板文件即可;

(3) 因人而异的信息: 针对每个查新员的不同信息, 采用配置文件形式, 每人维护一份包含个人信息的文件, 可在报告中体现个人信息; 配置信息提供图形界面打开、保存, 保存后可重复使用; 配置文件采用标准的XML格式, 也可方便地使用其他编辑器打开、识别、修改内部模块。相关内容包括: 查新员姓名、职称、电话、信箱、审核人信息等, 也包括因查新站而异的查新站名称、地址、邮编、检索数据库等类似信息;

(4) 完全不同的信息: 针对具体查新课题中的不同字段, 直接在软件输入框中录入, 在生成报告时自动填入相应位置, 例如项目名称、科学技术要点、检索式、检索结果等。

3.2 软件的详细设计

科技查新报告自动生成软件采用自顶向下的方法进行模块化设计, 设计过程中注重模块的独立性, 力求模块间低耦合; 模块内部采用面向对象的实现方法, 属性和函数均作为类的成员, 实例化为对象后使用, 内聚程度高。为实现需求要求的各项功能, 软件结构与需求分析时建立的模型一致, 设计为如下几个主要模块: 配置信息模块、录入信息模块、保存、打开模块、报告生成模块。各主要模块向下划分子模块, 软件各个模块间的调用关系结构如图2所示:

图2 查新报告自动生成软件模块调用结构图

.

(1) 配置信息模块。软件为设置信息提供菜单选项和图形界面, 随时可以通过菜单打开、修改并保存。打开配置信息时调用读取默认配置子模块, 保存配置信息时调用保存默认配置子模块。配置信息保存为软件所在目录的标准XML格式文件, 因而直接修改该文件也可等效达到修改默认值的目的。

(2) 录入信息模块。创建项目后, 录入信息模块即调用读取默认信息子模块, 将默认设置填充到用户界面的相应字段, 与其他字段的填写控件一起展现给用户, 提供修改、填写功能。填写/选择辅助功能子模块方便用户选择、提高效率和准确性, 进一步细分又包括多项, 例如: 检索词提取, 根据用户设置的检索词分隔符, 将所有检索式拆分, 去除重复项, 得到检索词, 自动填入检索词文本框, 用户可根据需要手动调整。生成报告时直接填入报告相应位置; 检索范围选择, 外文检索数据库按学科分类, 学科下采用树形结构。选择学科节点时, 软件自动选中其下所有数据库子节点; 取消选中学科时, 即取消选中其下所有数据库子节点。所有日期字段使用日历选择控件, 用户只需点击该图标即可打开日历, 通过鼠标方便地选择日期, 软件自动将日期呈现为所需的年月日格式。

(3) 保存、打开模块。保存时将界面中的所有字段内容存储到硬盘, 打开时则恢复保存的状态。首次保存项目信息时提示用户选择保存位置和文件名, 存储格式同样为标准的XML, 该文件所占空间小, 便于传递, 也可方便地用记事本等多种编辑器打开查看或修改。

(4) 报告生成模块。用户选择生成报告后, 报告生成模块工作, 调用读取报告模板子模块, 打开报告模板, 在填充报告内容子模块中, 按照报告模板的格式要求, 将界面上各个字段的内容, 自动填入相应位置; 如某字段在报告中出现多次, 即使用同一数据源多次填写; 根据需要自动编号、扩展表格; 自动修改查新结论中引用文档为上标等特殊格式。报告生成时提示用户选择保存位置和文件类型, 支持Doc、Docx两种输出格式。

4 查新报告自动生成软件实现的关键技术
4.1 开发环境和系统要求

考虑到软件的易用性、稳定性和安全性, 该软件基于Microsoft公司的Visual Studio 2012集成开发环境, 紧密结合.Net Framework 4.5平台, 使用C#语言实现[ 9, 10, 11]。应用程序占用空间小、运行速度快, 高效率、高容错, 可以在Windows XP/Windows 7及Windows Server 2003/2008等操作系统下稳定运行, 采用第三方控件Aspose.Words直接读写Doc、Docx文件, 对于PC的硬件配置要求并不高, 符合绝大多数查新员的实际工作环境。

4.2 Word模板技术

为了避免反复输入相同的信息或做重复的格式修改, 软件引入模板技术。程序获取用户输入的文本后, 根据已定的样式名来查找文本样式, 根据Word文档“域”来定位文本在文档中出现的位置 (字体与段落等格式已在Word模板中定义) , 随后根据模板创建一个新的文档, 进行样式与文本匹配并将文本输出到新的文档中。

创建自定义模板的方法如下: 新建一个空白的Word文档, 在文档中添加相关信息, 设置好要求的格式, 将这些作为模板的静态文本。对于需要动态改变的部分, 则在相应位置插入域, 并设置标识。然后将设置的Word文档以Doc或Docx形式保存, 即完成模板的创建。部分查新报告Word文档模板如图3所示:

图3 查新报告Word文档模板

.
4.3 查新报告文档文字内容的组织控制

软件利用Word文档“域”作为定位工具, 通过文档的Range属性实现对“域”的定位, 并进行后续内容处理。在报告模板中需要填充文字处, 预先填入特定域, 软件生成报告时, 对所有特定域进行遍历, 查找到某域后, 在该处填入所需内容。文档中单行文本、多行文本、特殊格式的文本、表格分别归类处理。

(1) 普通格式单行文本填充, 直接使用Aspose.Words提供的接口函数进行操作, 代码示例如下:

doc.Range.Replace (" CCJJ项目名称JJCC" , textBox项目名称.Text, true, false) ;

(2) 普通格式多行文本填充, 需先定义多行文本替换回调函数ReplaceTextBlock, 在填充时指定该函数名称, 则软件遇到匹配文本后, 即进入该函数执行填充多行文本的操作。代码示例如下:

sCurTextBlock = textBox科学技术要点.Text;

doc.Range.Replace (new Regex (" CCJJ科学技术要点JJCC" ) , new ReplaceEvaluator (ReplaceTextBlock) , true) ;

多行文本填充的回调函数主要内容为:

private static ReplaceAction ReplaceTextBlock (object sender, .

ReplaceEvaluatorArgs e) .

{.

DocumentBuilder builder = new DocumentBuilder ( (Document) e.MatchNode.Document) ;

builder.MoveTo (e.MatchNode) ;

builder.Write (sCurTextBlock) ;

…….

}.

(3) 表格的填写, 通过设置表格首行为特定域, 根据用户选定的内容, 软件自动添加表格行, 并自动填充行编号等内容。与多行文本填充同理, 表格操作也需提前设定回调函数InsertTableLines, 匹配到表格域时调用该函数。主要实现代码如下:

doc.Range.Replace (new Regex (" CCJJ国外数据库JJCC" ) , new ReplaceEvaluator (InsertTableLines) , true) ;

表格填写的回调函数主要内容为:

private static ReplaceAction InsertTableLines (object sender, ReplaceEvaluatorArgs e) .

{.

DocumentBuilder builder = new DocumentBuilder ( (Document) e.MatchNode.Document) ;

builder.MoveTo (e.MatchNode) ;

for (int i = 0; i< alDBs.Count; i++) .

{.

CompositeNode cn;

cn = (CompositeNode) cnCurRow.Clone (true) ;

cnCurRow.ParentNode.AppendChild (cn) ;

cnCurRow.ParentNode.InsertAfter (cn, cnCurRow) ;

…….

builder.Write (sRow.Substring (0, ntPos) ) ;

}…….

}.

4.4 查新报告检索词的提取

查新员输入检索式后, 自动提取检索词, 可以减少查新员的部分重复性劳动。从检索式中提取检索词, 可由查新员指定检索词之间的分隔符。分隔符可通过设置界面灵活定制, 因常用分隔符较为固定, 首次使用时定制准确后一般不需修改。

定义检索词分隔符:

ArrayList al = new ArrayList () ;

ArrayList ConfigSplits = new ArrayList () ;

al.AddRange (ConfigSplits) ; //界面定制的检索词分隔符.

int nCount = al.Count;

string[] splits = new string[nCount];

从检索式中拆分出检索词的主要实现代码为:

string[] Words = textBox检索式1.Text.Split (splits, .

StringSplitOptions.RemoveEmptyEntries) ;

textBox检索词.Text = " 、" ;

foreach (string sWord in Words) {.

if (textBox检索词.Text.Contains (" 、" + sWord + " 、" ) )
//如检索词出现多次, 只取一次.

continue;

textBox检索词.Text += sWord;

textBox检索词.Text += " 、" ;

}.

textBox检索词.Text = textBox检索词.Text.Substring (1, textBox检索词.Text.Length - 2) ;

5 查新报告自动生成软件的使用及效果

软件首次使用时, 按需定制所需信息, 保存后即可重复使用, 并可随时查阅、修改。软件根据各级别配置的信息和当前时间, 相关字段在该系统中显示为默认值, 修改时提供图形化界面和相关控件。所有信息填写完成后, 可一键生成标准Word格式的查新报告。查新报告的字体、段落和章节号等自动按标准格式生成, 无需反复人工调整。一份报告中多次出现的同一字段, 系统自动统一填写, 避免人工忘记修改或修改不一致等差错。检索范围及数据库直接勾选, 即可列入报告, 不需手动维护数据库表格。日期、年月等信息由软件根据当前时间自动生成默认值。查新报告模板、配置文件、查新数据文件分别独立存在, 方便统一管理又不失个性化, 易于传递、复用。使用该软件期间, 可随时保存当前工作状态, 或打开之前存档的信息。

查新员在前期的文献检索、结果分析完成以后, 只需要将结果直接复制到该软件中, 无须考虑各种因素, 点击“生成报告”, 可立即一键生成标准Word格式的查新报告, 部分使用过程及效果如图4所示:

图4 查新报告自动生成软件的使用及效果

.

经北京师范大学图书馆科技查新工作站多位查新员在工作中的实际使用, 相对于之前的手工操作, 书写一份查新报告平均时间可由原来的半小时以上缩短为5分钟以内。

6 结 语

本文开发的科技查新报告自动生成软件已经完成开发和测试, 正式应用于本馆查新工作站的查新工作中。该软件减少了查新员的重复琐碎性的工作, 同时避免了人工制作查新报告过程中可能出现的输入性错误、不一致性错误等, 从而提高了工作效率和准确性。当然, 该软件还有一些可以进一步扩展的功能, 如: 查新数据由目前的单机文件管理, 增加提交到数据库的功能, 部署数据库和Web服务器, 开发管理和查询页面, 从而集成查新题目输入管理、查新题目分配、报告编号自动生成、查新过程实时记录、查新题目状态跟踪、工作流自动提醒审核、工作量统计、月度季度年度数据汇总和总结报告生成等模块, 构建全方位覆盖查新工作的自动化办公系统。

参考文献
[1] 腾跃, 谢新洲. 科技查新手册[M]. 北京: 科学技术文献出版社, 2004. (Teng Yue, Xie Xinzhou. Sci-tech Novelty Search Manual [M]. Beijing: Scientific and Technical Documents Publishing House, 2004. ) [本文引用:1]
[2] 史新辉. 科技查新工作网络化管理新模式构想[J]. 情报杂志, 2009, 28 (S2) : 170-171, 175. (Shi Xinhui. New Network Management Model of Sci-tech Novelty Searching Work[J]. Journal of Intelligence, 2009, 28 (S2) : 170-171, 175. ) [本文引用:1] [CJCR: 0.951]
[3] 马景娣, 田稷. 基于Web的科技查新工作平台设计与实现[J]. 现代情报, 2005 (3) : 164-165, 7. (Ma Jingdi, Tian Ji. Design and Implementation of the Sci-tech Novelty Search Platform on Web[J]. Modern Information, 2005 (3) : 164-165, 7. ) [本文引用:1]
[4] 郑菲, 陈朝辉, 文奕, 等. 中国科学院科技查新检索服务平台的设计与实践应用[J]. 现代图书情报技术, 2010 (11) : 79-83. (Zheng Fei, Chen Zhaohui, Wen Yi, et al. Design and Practical Application of CAS Novelty Search Service Platform[J]. New Technology of Library and Information Service, 2010 (11) : 79-83. ) [本文引用:1] [CJCR: 1.073]
[5] 袁润, 周金元, 卢章平. 科技查新信息管理系统的设计与实现[J]. 现代情报, 2007 (7) : 152-155. (Yuan Run, Zhou Jinyuan, Lu Zhangping. Design and Implementation of the Sci-tech Novelty Retrieval Management System[J]. Modern Information, 2007 (7) : 152-155. ) [本文引用:1] [CJCR: 0.801]
[6] Office 2010[EB/OL]. [2012-11-23]. http://msdn.microsoft.com/zh-cn/library/ee658189(office.14).aspx. [本文引用:1]
[7] Aspose. Words for . NET[EB/OL]. [2012-12-02]. http://www.aspose.com/.net/word-component.aspx. [本文引用:1]
[8] 华泽, 杨明福. Office文档二次开发的实现[J]. 郑州大学学报: 理学版, 2002, 34 (4) : 51-54. (Hua Ze, Yang Mingfu. Office Document’s Redevelopment Based on Automation of COM[J]. Journal of Zhengzhou University: Natural Science Edition, 2002, 34 (4) : 51-54. ) [本文引用:1] [CJCR: 0.2579]
[9] 熊瑜容, 柴毅, 王淑娟, 等. 基于VC++的Word文档自动生成技术[J]. 计算机时代, 2010 (1) : 52-54. (Xiong Yurong, Chai Yi, Wang Shujuan, et al. Word Document Automatically Generated Technology Based on VC++[J]. Computer Era, 2010 (1) : 52-54. ) [本文引用:1]
[10] Troelsen A. C#与. NET 4高级程序设计[M]. 北京: 人民邮电出版社, 2011. (Troelsen A. Pro C# 2010 and the . Net 4. 0 Platform[M]. Beijing: Posts & Telecom Press, 2011. ) [本文引用:1]
[11] Sharp J. Visual C# 2010从入门到精通[M]. 周靖译. 北京: 清华大学出版社, 2010. (Sharp J. Microsoft Visual C# 2010 Step by Step[M]. Translated by Zhou Jing. Beijing: Tsinghua University Press, 2010. ) [本文引用:1]