基于混合编程技术的文献管理系统开发

背景

文献管理软件的功能包括:文献信息的收集、文献信息的整理和组织、论文中对文献引用的插入和参考书目的生成。对于科技管理人员,还需要其他功能包括批量文献采集,文献数据合并,文献统计分析,文献数据导出和发布等。
目前通用的文献管理软件比较多,商业性软件包括EndNote、Reference Manager、ProCite、RefWorks、NoteExpress、NoteFirst、Citavi、医学文献王,免费软件包括知网研学、Zotero、Mendeley、JabRef等。
但这些软件的主要面向的对象为科技工作者,其功能包括个人知识管理、论文写作、构建专题数据库、科技查新、编辑工作等。对于科技管理人员,还不能满足其工作需求。所以有必要开发文献管理系统实现相关功能。

调查和分析

国内也有文献报道基于文献管理软件进行功能开发,主要是解决文献题录格式的转换和导入。江占勇开发的CvtCNKI可以将中国期刊网(CNKI)等国内数据库提供的不规则文献题录信息转换为标准格式,以便导入到EndNote等文献管理工具。2010年, 李安邦等开发的Cvt Enw软件使用JavaScript脚本程序从三大中文数据库网页中抓取文献题录信息生产Endnote格式。
随着文献管理软件的更新换代,大多已经实现各种插件可以导入三大中文数据库(CNKI、万方数据库和维普数据库)中的题录。各数据库也支持导出各种格式参考文献,但题录内容范围并不一致,缺乏规范。
CNKI支持导出知网研学、Refworks、EndNote、NoteExpress、NoteFirst及自定义格式,各种格式的内容范围各不一致。
万方同样支持导出各种格式,包括Refworks、EndNote、NoteExpress、NoteFirst、Bibtex格式及自定义格式,但内容范围也不一致。
维普支持导出格式较少,仅包括ENDNOTE、NoteExpress和自定义格式。

文献统计功能

不同文献类型的题录信息范围有所不同。《GB/T 7714-2015.信息与文献.参考文献著录规则》规定了各个学科、各种类型信息资源的参考文献的著录项目、著录顺序、著录用符号、著录用文字、各个著录项目的著录方法以及参考文献在正文中的标注法。但标准适用于著者和编辑著录参考文献,而不是供图书馆员、文献目录编制者以及索引编辑者使用的文献著录规则。

基于写作的文献管理需要的期刊题录信息包括主要责任者(author),题名(title),期刊题名(journal),出版年(year),卷(volume),期(number),引文页码(pages),以及数字对象唯一标识符(doi)。不同文献类型的题录信息范围有所不同,需要按照GB/T 7714-2015参考文献著录规则。
但是对于科技管理工作,要求的题录信息范围更广,以满足和实现管理和统计功能。
比如,医院学科建设情况汇总要求上报的论文信息除了论文题目、刊物名称、期刊名称、年份、卷、期、页、所有作者,还包括发表时间、是否SCI、排名、索引情况、影响因子、被引用次数、通讯作者,而后者这些信息在数据库导出的各种格式中并不常规包括。
不仅如此,医院科研管理工作,还需要分析作者的科室部门,期刊等级,是否本院论文(作者单位本院排列第一),是否属于论著,这些信息需要后期分析加入。

题录格式

Endnote格式是最为常用的文献格式,常被选用为中间格式用于转换成其他格式。但是Endnote格式题录只有52项,其中8项可以用于自定义其他内容,其他均有特指,这对于常规文献管理是足够的,但是对于科技管理文献分析是不够的,还需要超出参考文献为目的的其他更加详尽的著录项目。

LaTeX 是国际学术界最流行的排版系统之一,许多国际著名的出版机构和期刊编辑部都要求或推荐作者使用 LaTeX 投稿。Latex中用Bibtex来引用文献,并通过\bibliographystyle来指定参考文献的呈现方式。
BibTex由Oren Patashnik在1988年开发,其对文献类型和著录项目的定义和推荐已是事实上的标准。
BibTex中文献类型包括期刊的析出文献(article),普通图书(book),图书的析出文献(incollection),会议录的析出文献(inproceedings 或 conference),学位论文(mastersthesis 或 phdthesis),其他(misc),会议录(proceedings),报告(techreport),这些在GB/T 7714-2015中有直接对应。
除此之外,GB/T 7714-2015中有而BibTex中不属于标准文献类型的包括:档案(archive),汇编(collection),数据库(database),数据集(dataset),舆图(map),报纸(newspaper),电子公告(online),专利(patent),计算机程序(software),标准(standard);BibTex中属于标准类型而GB/T 7714-2015没有直接对应的有:小册子(booklet),书籍部分(inbook),技术手册(manual),未出版文档(unplublished)。

BibTex中著录项目包括出版地(address), 主要责任者(author), 图书题名(booktitle), 版本(edition), 机构(用于techreport)(institution), 期刊题名(journal), 拼音(用于排序)(key), 期(或者专利号)(number), 组织(用于会议)(organization), 引文页码(pages), 出版者(publisher), 学校(用于phdthesis)(school), 系列(series), 题名(title), 卷(volume), 出版年(year), 这些在GB/T 7714-2015中有直接对应。
除此之外,GB/T 7714-2015中有而BibTex中不属于标准著录项目的包括:更新或修改日期(date),数字对象唯一标识符(doi),编辑(editor),语言(language),文献类型标识(mark),载体类型标识(medium),翻译者(translator),获取和访问路径(url),引用日期(urldate);BibTex中属于标准著录项目而GB/T 7714-2015没有直接对应的有:注解(annote),章(
chapter),交叉引用关键词(crossref),出版方式(howpublished),月(month),笔记(note),类型(type)。
LaTeX的自带参考文献宏包natbib还扩充支持ISBN、ISSN、URL、DOI、EID著录项目。

根据需要,BibTex可以对文献类型和著录项目进行扩充,以满足GB/T 7714-2015标准,格式转换,科技管理等需求。

JabRef是一个免费开源处理BibTeX格式的文献管理软件,用Java语言编写,可运行在Windows、Linux、Mac等多个平台。JabRef可以自定义文献导入导出功能和参考文献生成格式,其丰富的功能能够满足科技管理拓展著录项目和统计报表等需求。

格式转换

由于文献管理软件众多,并使用不同的格式管理文件,其著录项目名称和范围各有不同,难以在各种格式之间直接进行转换,通常是先转成中间格式再进行转换。
EnoNote格式由于使用较为普遍,是较常采用的中间格式,但其著录项目只有52项,限制了应用范围。
BibTex格式著录项目名称直观,能够自由扩充著录项目,是较好的中间格式,前提是要建立和其他格式的对应关系。
我们首先调查分析了cnki、万方和维普的导出格式,选用著录项目较多的NoteExpress格式作为拟转换格式。
分析endnote格式分析和GB/T 7714-2015要求,确定标准著录项目。
建立NoteExpress格式到BibTex格式转换关系,不属于标准著录项目的则扩充为著录项目。
在此基础上,建立BibTex到Endnote格式、RiS 格式等转换关系。

开发语言选择

文献数据的采集分析和格式转换,需要操作文本进行正则分析。Perl语言很容易操作文本,其哈希结构最适合建立题录对应关系。
最终实现的文献管理系统要使用BibTex格式进行文献管理,并进行各种格式的转换和生产各种报表,需要良好的用户操作界面。Perl虽然也支持图形界面编程,但实现复杂功能较难。
Lazarus是一个开源免费的快速应用开发工具,是面向对象的 Pascal 集成开发环境,具备很强的窗体处理功能,界面清晰,操作简单方便。
可以通过TProcess调用perl编译的外部程序。

技术结构

EndNote格式到BibTex格式的题录对应关系

my %endnote_bib=('%X'=>'abstract','%['=>'urldate','%M'=>'accession_number','%O'=>'alternate_title','%A'=>'author','%+'=>'Author_Address','%L'=>'call_ number','%^'=>'caption','%1'=>'level','%2'=>'translated_journal','%3'=>'translated_abstract','%4'=>'translated_keywords','%#'=>'BeginPage','%$'=>'EndPage','%]'=>'JumpPage','%='=>'CN','%W'=>'database','%8'=>'date','%R'=>'doi','%7'=>'edition','%E'=>'editor','%>'=>'file','%@'=>'issn','%J'=>'journal','%K'=>'keywords','%F'=>'label','%G'=>'language','%~'=>'department','%Z'=>'notes','%N'=>'Number','%6'=>'Volumes_Number ','%('=>'Original_ Publication','%P'=>'Pages','%C'=>'address','%I'=>'publisher','%0'=>'mark','%)'=>'Reprint_Edition','%<'=>'class','%*'=>'Reviewed_Item','%B'=>'Secondary_Title','%&'=>'Section','%!'=>'short_title','%?'=>'subsidiary_author','%Y'=>'Tertiary_Author ','%S'=>'Tertiary_Title','%T'=>'Title','%H'=>'Translated Author','%Q'=>'Translated Title','%9'=>'type','%U'=>'URL','%V'=>'volume','%D'=>'year');

BibTex格式到EndNote格式的题录对应关系

my %bib_endnote = reverse %endnote_to_bib;

NoteExpress格式到BibTex格式转换关系

my %noteexpress_to_bib=('Abstract'=>'abstract','Author'=>'author','Author Address'=>'Author_Address','BeginPage'=>'BeginPage','BookID'=>'accession_number','Corporate Author'=>'Reviewed_Item','DOI'=>'doi','Data'=>'','Database Provider'=>'database','Date'=>'date','EndPage'=>'EndPage','GCH'=>'call_ number','ISBN/ISSN'=>'issn','Issue'=>'Number','Journal'=>'journal','JumpPage'=>'JumpPage','Keywords'=>'keywords','Language'=>'language','Name'=>'journal','Notes'=>'CN','Num'=>'Number','Pages'=>'Pages','Place Published'=>'address','Publisher'=>'Author_Address','Reference Type'=>'mark','Secondary Title'=>'Secondary_Title','Subsidiary Author'=>'subsidiary_author','Subsidiary Author,'=>'subsidiary_author','Tertiary Author'=>'Tertiary_Author ','Tertiary Title'=>'Tertiary_Title','Title'=>'Title','Translated Abstract'=>'translated_abstract','Translated Author'=>'Translated Author','Translated Journal'=>'translated_journal','Translated Keywords'=>'translated_keywords','Translated Title'=>'Translated Title','Type of Work'=>'type','URL'=>'URL','Vol'=>'volume','Volume'=>'volume','Year'=>'year','year'=>'year');

lazarus调用外部程序实现格式转换功能

var
  AProcess: TProcess;
begin
  AProcess := TProcess.Create(nil);
  AProcess.Executable:= PerlFileName;
  AProcess.Parameters.Add('bib_to_endnote');
  AProcess.Parameters.Add(BibFileName);
  AProcess.Parameters.Add(BibFileName+'.enw');
  AProcess.Options := AProcess.Options + [poWaitOnExit,poNoConsole];
  AProcess.Execute;
  AProcess.Free;  
end; 

软件界面

基于混合编程技术的文献管理系统开发_第1张图片
Lazarus 开发界面
基于混合编程技术的文献管理系统开发_第2张图片
文献管理系统运行界面
基于混合编程技术的文献管理系统开发_第3张图片
格式转换菜单栏
基于混合编程技术的文献管理系统开发_第4张图片
文献采集和管理工具
基于混合编程技术的文献管理系统开发_第5张图片
文献采集系统
基于混合编程技术的文献管理系统开发_第6张图片
JabRef软件管理BibTex

结论

混合编程是指使用两种或两种以上的程序设计语言来开发应用程序的过程。
至今为止,编程语言已经达到600多种,但流行的程序设计语言最多二三十种,它们有各自的特点和擅长领域。混合编程可以充分利用各种程序设计语言的优势。
文献管理的主要工作是文本分析,这是perl语言最擅长的领域。Perl是Larry为了格式化处理文本而创建的,其中最重要的特性是它内部集成了正则表达式的功能,以及巨大的第三方代码库CPAN。
文献管理任务需要菜单交互操作,对于终端用户,界面开发十分重要。perl也支持界面开发,文献采集系统就是用perl语言加Tk模块开发的,输入栏目可以用编程快速生成,但不适合建立复杂GUI界面。
Delphi是Windows平台下著名的快速应用程序开发工具,其可视化编程环境可以快速生成具备优美界面的程序框架。Lazarus 与 Delphi 高度兼容,并被视作后者的开源替代品,能运行于Linux,Win32和Mac os。Lazarus的编程语言是以Pascal为基础的。Pascal是最早出现的结构化编程语言,具语法严谨,程序易写。
事实证明,Lazarus开发文献管理系统界面非常简便,支持快捷键操作菜单,通过TProcess可以极方便调用外部程序。perl 程序可以使用pp模块进行编译和打包,适合调用完成复杂任务。如果需要保护代码,可以使用PAR::Filter::Crypto 模块进行代码加密。
系统还采用HTML文件作为文献报告格式,其内部的JavaScript语言能够完成复杂检索,适合网络发布。也能够以Excel格式生成报表。
基于混合编程技术的文献管理系统开发,利用了Lazarus快速界面开发和perl语言快捷文本处理的优势,能够提高程序开发效率,实现任务目标。

参考文献

https://mirrors.tuna.tsinghua.edu.cn/CTAN/macros/latex/contrib/natbib/natbib.pdf

http://search.chkd.cnki.net/kcms/detail/detail.aspx?QueryID=2&CurRec=1&dbcode=CHKJ&dbname=CHKJLAST&filename=SDTG201903004

http://www.openoffice.org/bibliographic/btxdoc.html#latex

http://www.openoffice.org/bibliographic/bibtex-defs.html

http://www.bibtex.org/

https://www.math.uh.edu/~torok/math_6298/latex/bibtex.html

http://kns.cnki.net/KXReader/Detail?TIMESTAMP=637145145606575000&DBCODE=CJFQ&TABLEName=CJFD2014&FileName=QBTS201411003&RESULT=1&SIGN=qZXszpsdhkMfG74d7bKlm3KmGbg%3d

你可能感兴趣的:(基于混合编程技术的文献管理系统开发)