基于混合編程技術的文獻管理系統開發V2

楊曉凱

溫州醫科大學溫州市第三臨床學院/溫州市人民醫院

【摘要】目的 基于混合編程技術,使用Lazarus和Perl語言等設計開發文獻管理系統,滿足科技管理人員的工作需求。方法 調查分析三大中文數據庫(CNKI、萬方數據庫和維普數據庫)中的導出格式和著錄項目內容,選用著錄項目較多的NoteExpress格式作為擬轉換格式,按照GB/T 7714-2015.信息與文獻.參考文獻著錄規則建立和BibTex格式的對應關系,以BibTex作為最終格式和中間格式,實現和Endnote格式的相互轉換。使用Perl語言實現數據下載、提取、分析和格式轉換功能,使用Lazarus實現界面開發。結論 基于混合編程技術的文獻管理系統開發,利用了Lazarus快速界面開發和perl語言快捷文本處理的優勢,能夠提高程序開發效率,實現任務目標。

【關鍵詞】混合編程;文獻管理;Lazarus;Perl;BibTex; Endnote


作者單位:325000 浙江省溫州市,溫州市人民醫院
[作者簡介] 楊曉凱(1973-),男(漢族),浙江省溫州市人,碩士,主任醫師。
*通訊作者,Email:yakeworld@126.com

背景

文獻管理軟件的功能包括文獻信息的收集、文獻信息的整理和組織、論文中對文獻引用的插入和參考書目的生成。對于科技管理人員,還需要其他功能包括批量文獻數據采集,文獻數據合并,文獻統計分析,文獻數據導出和發布等。
目前通用的文獻管理軟件比較多,商業性軟件包括EndNote、Reference Manager、ProCite、RefWorks、NoteExpress、NoteFirst、Citavi、醫學文獻王,免費軟件包括知網研學、Zotero、Mendeley、JabRef等[1]
但這些軟件主要面向的對象為科技工作者,其功能包括個人知識管理、論文寫作、構建專題數據庫、科技查新、編輯工作等,還不能滿足科技管理人員的工作需求。所以有必要開發系統實現相關功能。

文獻數據采集

三大中文數據庫(CNKI、萬方數據庫和維普數據庫)支持導出各種格式參考文獻,但著錄項目內容范圍并不一致,缺乏規范。CNKI支持導出知網研學、Refworks、EndNote、NoteExpress、NoteFirst及自定義格式,各種格式的內容范圍各不一致。萬方同樣支持導出各種格式,包括Refworks、EndNote、NoteExpress、NoteFirst、Bibtex格式及自定義格式,但內容范圍也不一致。維普支持導出格式較少,僅包括ENDNOTE、NoteExpress和自定義格式。各種文獻導出格式,大都服務于常規文獻管理,著錄項目內容有限,其中著錄項目較多為NoteExpress格式。可以通過不同格式合并或者檢索和文摘頁碼進一步提取信息。

著錄項目格式

不同的參考文獻管理軟件,其使用的文獻數據保存格式并不相同。Endnote軟件由Thomson Reuters公司開發,是最好的文獻管理工具之一,其文件格式常被選用為中間格式用于轉換成其他格式。但是Endnote格式著錄項目只有52項,其中8項可以用于自定義其他內容,其他均有特指,這對于常規文獻管理是足夠的,但是對于科技管理文獻分析是不夠的,不能記錄其他更加詳盡的著錄項目。
LaTeX 是國際學術界最流行的排版系統之一,其使用BibTex來引用文獻。BibTex由Oren Patashnik在1988年開發,其對文獻類型和著錄項目的定義和推薦已是事實上的標準[2]。雖然BibTex有規定其標準文獻類型和著錄項目[2],但由于其格式的開發性,根據需要,BibTex可以對文獻類型和著錄項目進行擴充,以滿足GB/T 7714-2015信息與文獻.參考文獻著錄規則等需求[3]。
由于文獻管理軟件眾多,并使用不同的格式管理文件,其著錄項目名稱和范圍各有不同,難以在各種格式之間直接進行轉換,通常是先轉成中間格式再進行轉換。
EnoNote格式由于使用較為普遍,是較常采用的中間格式,但其著錄項目只有52項,限制了應用范圍。
BibTex格式著錄項目名稱直觀,能夠自由擴充著錄項目,是較好的中間格式,前提是要建立和其他格式的對應關系。

格式轉換

國內有文獻報道文獻著錄項目格式的轉換和導入。江占勇開發的CvtCNKI可以將中國期刊網(CNKI)等國內數據庫提供的不規則文獻著錄項目信息轉換為標準格式,以便導入到EndNote等文獻管理工具[4]。2010年, 李安邦等開發的Cvt Enw軟件使用JavaScript腳本程序從三大中文數據庫網頁中抓取文獻著錄項目信息生產Endnote格式[4]。目前三大中文數據庫已經支持導出各種格式參考文獻以滿足導入各種參考文獻管理文件的需求。存在的問題是著錄項目內容不能滿足科技管理需求,格式轉換的需求依然存在。
以BibTex作為中間格式,實現各種參考文獻格式轉換,需要根據GB/T 7714-2015規范要求和科技管理需要擴充和規范BibTex著錄文獻類型和著錄項目,在此基礎上建立和各種參考文獻格式的對應關系,無法直接對應的可再次擴充BibTex格式。

文獻類型分析

BibTex中標準文獻類型包括期刊的析出文獻(article),普通圖書(book),圖書的析出文獻(incollection),會議錄的析出文獻(inproceedings 或 conference),學位論文(mastersthesis 或 phdthesis),會議錄(proceedings),報告(techreport),其他(misc)[2],這些在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)。

著錄項目分析

不同文獻類型的著錄項目信息范圍有所不同?!禛B/T 7714-2015.信息與文獻.參考文獻著錄規則》規定了各個學科、各種類型信息資源的參考文獻的著錄項目、著錄順序、著錄用符號、著錄用文字、各個著錄項目的著錄方法以及參考文獻在正文中的標注法。但標準適用于著者和編輯著錄參考文獻,而不是供圖書館員、文獻目錄編制者以及索引編輯者使用的文獻著錄規則[5][6]
基于寫作的文獻管理需要的期刊著錄項目信息包括主要責任者(author),題名(title),期刊題名(journal),出版年(year),卷(volume),期(number),引文頁碼(pages),以及數字對象唯一標識符(doi)。不同文獻類型的著錄項目信息范圍有所不同,需要按照GB/T 7714-2015參考文獻著錄規則。
BibTex中著錄項目包括出版地(address), 主要責任者(author), 圖書題名(booktitle), 版本(edition), 機構(用于techreport)(institution), 期刊題名(journal), 拼音(用于排序)(key), 期(或者專利號)(number), 組織(用于會議)(organization), 引文頁碼(pages), 出版者(publisher), 學校(用于phdthesis)(school), 系列(series), 題名(title), 卷(volume), 出版年(year), 這些在GB/T 7714-2015中有直接對應[5][2][3]。
除此之外,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)[5][2][3]。

LaTeX的自帶參考文獻宏包natbib還擴充支持ISBN、ISSN、URL、DOI、EID著錄項目[7]。gbt7714宏包[3]能夠支持GB/T 7714—2015標準,不支持的 BibTeX 標準著錄項目有 annote, chapter, crossref, month, type,也不支持ISBN、ISSN、EID。

對于科技管理工作,要求的著錄項目信息范圍較廣,以滿足和實現管理和統計功能。比如,醫院學科建設情況匯總要求上報的論文信息除了論文題目、刊物名稱、期刊名稱、年份、卷、期、頁、所有作者,還包括發表時間、是否SCI、排名、索引情況、影響因子、被引用次數、通訊作者。不僅如此,醫院科研管理工作,還需要分析作者的科室部門,期刊等級,是否本院論文(作者單位本院排列第一),是否屬于論著。

開發語言選擇

文獻數據的采集分析和格式轉換,需要操作文本進行正則分析。Perl語言很容易操作文本,其內置的正則表達式利于分析提取數據,其哈希結構適合建立著錄項目對應關系。Perl6 相對于 Perl5 做了革命性的改革,擁有豐富的語言特征、支持多線程、正則表達式更加靈活,在字符處理方面更加輕便。最終實現的文獻管理系統要使用BibTex格式進行文獻管理,并進行各種格式的轉換和生產各種報表,需要良好的用戶操作界面。Perl雖然也支持圖形界面編程,但實現復雜功能較繁瑣。Lazarus是一個開源免費的快速應用開發工具,是面向對象的 Pascal 集成開發環境,具備很強的圖形界面開發功能,具備快速簡單方便等特點??梢酝ㄟ^TProcess調用perl編譯的外部程序實現功能整合。

技術結構

選擇BibTex作為中間格式,確保文獻信息不丟失以便轉換成其他格式。首先建立NoteExpress格式到BibTex格式的轉換對應關系以實現將采集的文獻數據轉換成BibTex格式(表1、2)。然后將EndNote等格式和BibTex格式建立明確對應關系以實現格式之間的相互轉換[8][9](表1、3)。
在先前的項目中我們曾用Perl語言實現格式的轉換[10]。但是用Raku語言來實現其代碼更加簡潔,Grammar特性還可以封裝復雜的正則表達式,邏輯更加清晰。
所實現的功能包括:NoteExpress和BibTex格式相互轉換,Endnote和BibTex格式相互轉換,Endnote和NoteExpress格式相互轉換,以及各種格式導出為參考文獻格式、網頁格式和Excel格式等。網頁文件使用了jQuery表格插件dataTables,支持檢索、篩選等交互功能。

使用 Grammars 解析BibTex格式

grammar Bib {
    regex TOP { <prefix>? <bib>+ % \n}
    regex prefix {<-[\@]>+}
    regex bib { \@<type>\{\,\n<bibkv>+\}\n}
    regex type {<-[\{]>+}
    regex bibkv {\s*<key>\s*\=\s*\{<value>\}\,*\n}
    regex key {<-[\{]>+?}
    regex value {<-[\{]>+}
};
my $content=$file_bib.IO.slurp;
Bib.parse($content);
say $/;

界面框架使用Lazarus來開發,可以快速生成菜單,并支持快捷鍵調用Perl程序功能(圖1)。Lazarus使用的Pascal語言語法簡單,調用外部程序關鍵代碼:

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 NoteExpress、BibTex和Endnote格式著錄項目對應關系

NoteExpress BibTex Endnote
URL url %U
Corporate Author reviewed_item %*
Tertiary Author tertiary_author Nill
GCH call_number %L
Keywords keywords %K
JumpPage jumppage %]
Place Published address %C
Type of Work type %9
Pages pages %P
Subsidiary Author subsidiary_author %?
Translated Journal translated_journal %2
Translated Abstract translated_abstract %3
Volume volume %V
Database Provider database %W
Vol volume %V
Translated Author translated_author %H
Year year %D
Tertiary Title tertiary_title %S
Issue number %N
Language language %G
Title title %T
BeginPage beginpage %#
Translated Title translated_title %Q
Translated Keywords translated_keywords %4
Date date %8
Journal journal %J
Subsidiary Author, subsidiary_author %?
ISBN/ISSN issn %@
Data year %D
Author author %A
EndPage endpage %$
Publisher author_address %+
Num number %N
Name journal %J
year year %D
Reference Type mark %0
Abstract abstract %X
BookID accession_number %M
DOI doi %R
Secondary Title secondary_title %B
Notes cn %=
Author Address author_address %+
Publisher publisher %I
Nill file %>
Nill level %1
Nill notes %Z
Nill editor %E
Nill section %&
Nill urldate %[
Nill class %<
Nill short_title %!
Nill tertiary_author %Y
Nill edition %7
Nill department %~
Nill alternate_title %O
Nill reprint_edition %)
Nill original_publication %(
Nill label %F
Nill caption %^
Nill volumes_number %6

表2 Noteexpress和BibTex文獻類型對應關系

Noteexpress BibTex
Book book
Paten patent
Legal Rule or Regulation misc
Journal Article article
Conference Proceedings conference
Thesis phdthesis
Newspaper Article article
Other Article misc

表3 Endnote和BibTex文獻類型對應關系

Endnote BibTex
Conference Paper inproceedings
Conference Proceedings proceedings
Journal Article article
Paten patent
Electronic Book book
Newspaper Article article
Unpublished Work unpublished
Electronic Article article
Book Section incollection
Magazine Article article
Book book
Thesis phdthesis
Edited Book book

圖 1 軟件GUI界面

格式轉換菜單欄

討論

混合編程是指使用兩種或兩種以上的程序設計語言來開發應用程序的過程。
自1954年美國約翰·貝克斯(John Backus)創造出了第一個高級語言Fortran語言,新的編程語言開始不斷涌現。至今為止,編程語言已經達到600多種,但流行的程序設計語言最多二三十種,它們有各自的特點和擅長領域。
Pascal語言由瑞士Niklaus Wirth教授于六十年代末設計并創立,具有語法嚴謹、層次分明等特點,是第一個結構化編程語言,被稱為“編程語言里一個重要的里程碑”。
Perl語言由拉里·沃爾(Larry Wall)于1987年12月18日發表。Perl是第一種后現代編程語言[11],最重要的特性是它內部集成了正則表達式的功能,以及巨大的第三方代碼庫CPAN,像C一樣強大,像awk、sed等腳本描述語言一樣方便,即可以把簡單工作簡單化,同時又不失去處理困難問題能力。2015年12月25日,開發了十多年的Perl 6語言在圣誕節正式發布,并于2019年10月改名為Raku,以便于和Perl 5區分。

混合編程可以充分利用各種程序設計語言的優勢,并被廣泛應用各種各種場景,是未來編程的一個趨勢。比如python語言涉及大量運算的時候總是調用C語言來實現。Perl 6使用Nativecall可以很方面執行C語言代碼,還可以使用Inline::Python使用python生態和Inline::Perl使用Perl 5生態。
文獻管理的主要工作是文本分析,這是perl語言最擅長的領域。Perl是Larry為了格式化處理文本而創建的,其中最重要的特性是它內部集成了正則表達式的功能,以及巨大的第三方代碼庫CPAN。Perl 6同樣繼承了Perl 5語言的優點。
文獻管理任務需要菜單交互操作,對于終端用戶,界面開發十分重要。Perl也支持界面開發,比如文獻采集系統就是用Perl語言加Tk模塊開發的,輸入欄目可以用編程快速生成,但不適合建立復雜的GUI界面。
Delphi是Windows平臺下著名的快速應用程序開發工具,其可視化編程環境可以快速生成具備優美界面的程序框架。Lazarus 與 Delphi 高度兼容,并被視作后者的開源替代品,能運行于Linux,Win32和Mac OS。Lazarus的編程語言是以Pascal為基礎的。事實證明,Lazarus開發文獻管理系統界面非常簡便,而且軟件界面支持快捷鍵操作菜單,通過TProcess可以極方便調用外部程序。Perl 程序可以直接調用,也可以使用pp模塊進行編譯和打包,適合調用完成復雜任務。如果需要保護源代碼,可以使用PAR::Filter::Crypto 模塊進行代碼加密。系統還采用HTML文件作為文獻報告格式,其內部的JavaScript語言能夠完成復雜檢索,適合網絡發布。也能夠以Excel格式生成報表。Lazarus具備“一次編寫,到處編譯”的特性,不需要重新編碼就可以為不同的平臺開發相同的產品,Perl語言也具備跨平臺特性。

結論

基于混合編程技術的文獻管理系統開發,利用了Lazarus快速界面開發和perl語言快捷文本處理的優勢,能夠提高程序開發效率,實現任務目標。

參考文獻


  1. 張穎,劉敏.文獻管理軟件研究現狀與對策分析[J].情報探索,2014(11):8-12. ?

  2. Oren Patashnik.BiB-TEXing[EB/OL].http://www.openoffice.org/bibliographic/btxdoc.html,1988-02-28/2020-02-18 ? ? ? ? ?

  3. Zeping Lee.GB/T 7714-2015 BibTEX style[EB/OL].http://mirrors.hust.edu.cn/CTAN/biblio/bibtex/contrib/gbt7714/gbt7714.pdf,2019-11-20/2020-02-18. ? ? ? ?

  4. 李安邦,蔣效會.CvtEnw:中文文獻著錄項目直接導出到文獻管理軟件[J].現代情報,2010,30(09):160-162. ? ?

  5. 中國國家標準化委員會.信息與文獻參考文獻著錄規則:GB/T 7714—2015[S].北京:中國標準出版社,2015. ? ? ?

  6. 文榕生. 新版參考文獻著錄規則求疵[J]. 山東圖書館學刊,2019(03):7-18. ?

  7. Patrick W. Daly.Natural Sciences Citations and References[EB/OL].https://mirrors.tuna.tsinghua.edu.cn/CTAN/macros/latex/contrib/natbib/natbib.pdf,2010-09-14/2020-02-18. ?

  8. Dominik Benz, Andreas Hotho, Robert J?schke,etc. The social bookmark and publication management system bibsonomy[J]. Vldb Journal, 19(6):849-875. ?

  9. https://github.com/JabRef/EndNode-JabRef-filters,2020-02-18 ?

  10. 楊曉凱.醫院科研論文的自動化采集、分析和管理[J].醫院管理論壇,2014,31(05):45-47+21. ?

  11. Larry Wall.Perl, the first postmodern computer language[EB/OL].https://www.perl.com/pub/1999/03/pm.html/,1999-06-09/2020-02-18. ?

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,967評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,273評論 3 415
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,870評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,742評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,527評論 6 407
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,010評論 1 322
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,108評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,250評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,769評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,656評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,853評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,371評論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,103評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,472評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,717評論 1 281
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,487評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,815評論 2 372

推薦閱讀更多精彩內容