科学人生◆品味科学分享 http://blog.sciencenet.cn/u/hxiuzhou 中国科学,从此他将伴我一起生活!

博文

利用VBA程序和HTTPS协议获取参考文献的DOI信息

已有 5147 次阅读 2016-11-4 09:09 |系统分类:论文交流| VBA, DOI

摘要  为了丰富文章信息,提升读者的阅读体验,本文编写了VBA程序,并利用HTTPS协议自动获取参考文献的DOI信息和超链接。经测试,运行VBA程序后,每50条参考文献大约需要1分钟即可解析完成,对注册过DOI的期刊文献的命中成功率几乎达到100%。对参考文献的体例结构进行精准分析和拆分是VBA程序运行成功的基础,向CrossRef机构申请成为会员使得DOI数据解析不受数据条目的限制,并对今后的数据挖掘提供方便。

关键词  VBA程序; HTTPS协议; DOI

2015年文化产业专项资金项目中国科技类学术期刊国际传播平台支持

Email: hxz@scichina.org

PDF全文见:侯修洲, 黄延红. 利用VBA程序和HTTPS协议获取参考文献的doi信息[J]. 编辑学报, 2016, 28(5): 466-469


数字对象唯一标识符 DOI (Digital Object Identifier)是辨识文献关联信息资源的关键字段信息,通过DOI可以快速链接到出版商网站发布的原文网页,也可以获取到该文献的完整Metadata元数据,方便读者下载和管理文献,在网络信息资源利用及文本挖掘方面有不可替代的地位和作用[1,2]。近年以来,出版商为了丰富文章信息,提升读者的阅读体验,往往会在参考文献中列出各个数据库的链接目标源,DOI及其相关链接便是其中的一种。同时我国已经于201512月公布了新的参考文献著录标准GB /T 7714—2015《信息与文献参考文献著录规则》[3], 在标准中已经明确将DOI作为必备著录项目[4]但是在实际编辑出版中, 出版商如何快速获取参考文献的DOI信息呢,在搜索引擎逐篇查询显然不可取,效率、时间和质量都难以保证。VBA程序(Visual Basic for Applications)在编辑出版工作中的应用已经有多人进行了尝试[5,6],本文充分利用CrossRef机构的会员身份,尝试借助VBA程序和HTTPS协议自动获取Word文档中的参考文献DOI

1 DOI查询方法

1.1  简单查询方法

DOI作为CrossRef网站(www.crossref.org)的核心产品,该网站提供了查询DOI的几个方式: 首先可以在其官方首页搜索关键词或主题检索文献信息,可以间接查询到DOI信息; 其次,该网站提供了一个简单查询页面(http://www.crossref.org/simpleTextQuery), 任何人都可以在这个页面注册Email账户,然后将本地的文献信息拷贝到”Enter text inthe box below”搜索框查询DOI信息。每次查询时允许多条批量查询,并且可以附带查询PubMed IDs信息,但是该方法限制每个月最多只能查询1000条,并且还需要将返回的结果网页的数据复制到Word文档中,由于复制的仅仅是文本信息,原文档的格式也难以保留,并且每一个步骤都是手动的,效率也不是很高。中国肺癌杂志的王玥和毛善锋等人[7]利用VBA编程在Word中实现了自动调用简单查询网页地址、自动填充email和参考文献等功能,但是每个月1000条的文献查询限制阻碍了该方法的推广,并且由于每个刊的参考文献体例格式不一样,实际上,CrossRef网站无法和待查的参考文献作出精确匹配,并且这个简单查询网页的核心只是一个模糊查询算法,难以精准锁定返回每篇文献的DOI

1.2  利用API接口查询DOI的方式

CrossRef网站已经认识到了简单查询页面不够精准的问题,并且已经开发了一套通过API(ApplicationProgramming Interface, 应用程序编程接口)精准锁定DOI的方法,主要包含两类,即OpenUrl开放链接源和HTTPS协议,这两种方式都允许会员和普通email用户查询,唯一区别是会员查询没有条数限制。需要说明的是,由于注册DOI信息的主要是科技期刊文献,CrossRef网站并不提供基于API接口的书籍、专利、博士论文、会议文集等其他形式的文献查询,所以本文讨论的也主要是如何获取期刊文献的DOI信息。

1.2.1          OpenUrl开放链接源查询DOI

通过OpenUrl开放链接源查询DOI(http://help.crossref.org/using_the_open_url_resolver), 对于会员,其查询格式如下,其中黑色字体部分是用户的用户名和密码:

https://DOI.crossref.org/openurl?pid=username:password&aulast=Maas%20LRM&title=JOURNAL%20OF%20PHYSICAL%20OCEANOGRAPHY&volume=32&issue=3&spage=870&date=2002

对于普通email账户,只需将上面网址中的“username:password”替换为注册过的email账户名即可。

不过无论是会员还是普通用户,对于OpenUrl开放链接源查询方式[8,9],上述地址最后返回的网页只是出版商的文章详情页,至于用户怎么从出版商的网页上获取DOI信息,CrossRef是不负责查询的,由于各个出版商的网页格式各种各样,如果想通过网页抓取DOI文本信息,这对程序设计是一个很大的挑战。

1.2.2          HTTPS协议查询DOI

通过HTTPS协议查询DOI(http://help.crossref.org/using_http), 对于会员,其查询格式如下,其中黑色字体部分是用户的用户名和密码:

https://DOI.crossref.org/servlet/query?usr=<USERNAME>&pwd=<PASSWORD>&qdata=|%20Natl%20Acad.%20Sci.%20USA|Zhou|94|24|13215|1997|||

上述网址中”qdata=”之后每一个竖线间隔对应一个字段,分别为刊名、第一作者的姓、卷、期、首页码、出版年。需要提醒注意的是,该网址末尾最后三个竖线不能省略,否则不能获取DOI信息。

对于普通email账户,需要将上面网址中的“usr=<USERNAME>&pwd=<PASSWORD>”替换为注册过的email账户名即可, 其代码为“pid=email账户名

相比OpenUrl开放链接源查询方式,HTTPS协议更简单快捷,比如通过HTTPS协议,网页只显示一串简单文本,由于无关信息少,所以打开网页速度非常快,并且可以直接在返回的网页文本中显示DOI,该字段信息被固定在最后一个竖线的末尾,方便后续程序来获取该文献的DOI信息,如图1所示。


1  利用HTTPS协议获取文献DOI信息的示意图

2 利用VBA程序和HTTPS协议

如果我们想利用HTTPS协议自动获取每条参考文献的DOI,首先面临的是HTTPS协议网址如何获取到文献的基本元数据,并且通过文献的元数据能够唯一确定这篇文献。一般来说,只要解析出文献的刊名、年、卷、首页码即可唯一确定文献,在WORD文档中,解析文献的刊名-出版年--首页码元数据、启动HTTPS协议网址、获取到返回网页的文本并解析出DOI信息,以及最后决定性的一步,即将该DOI信息按照一定的格式填写到文献末尾, 所有这些任务都可以交给VBA程序来完成。

2.1  解析文献元数据

Science ChinaPhysics, Mechanics &Astronomy一篇参考文献为例,我们尝试分析一下这篇文献的体例格式:Roberts P H,Glatzmaier G A. A three-dimensional self-consistent computer simulation of ageomagnetic field reversal. Nature, 1995,377: 203–209”。经过分析,我们得出结论:这篇文献的体例为【作者.文题.刊名,,:首页码尾页码】,那么转换为程序语言则需要首先识别出【*.*.*,*,*:*】这样的段落,然后再作数据解析拆分,即能得到该参考文献的刊、年、卷、首页码信息,其中*为通配符,句点、逗号和冒号则是拆分段落中各元素时的标记位置,拆分函数代码如下:

n1= InStr(x, ".")         ‘第一个句点出现的位置

n2= InStr(n1 + 1, x, ".")  ‘第二个句点出现的位置

n3= InStr(n2 + 1, x, ",")  ‘第二个句点之后第一个逗号的位置

n4= InStr(n3 + 1, x, ",")  ‘第二个句点之后第二个逗号的位置

n5 = InStr(n4 + 1, x, ":")    ‘第二个句点之后第二个逗号之后第一个冒号的位置

上述代码中,InstrVBA中的字符串函数,主要功能是获取指定字符在字符串首次出现的位置,以“n2= InStr(n1 + 1, x, ".")”为例,其中,n1+1是寻找的起始位置,x为寻找的字符串,”.”是寻找的字符。后面“‘”代表注释部分。

接下来我们要根据上述拆分点解析出具体数据,代码如下:

j = Trim(Mid(x, n2 + 1, n3 - n2 - 1))        ‘期刊名

year = Trim(Mid(x, n3 + 1, n4 - n3 - 1))     ‘出版年

vol = Trim(Mid(x, n4 + 1, n5 - n4 - 1))      ‘

If InStr(vol, "(") > 0 Then                

vol = Trim(Left(vol, InStr(vol, "(")- 1))    

End If

ref.SetRange ref.Start + n5 + 1, ref.End      

fpage = Trim(ref.Words(1).Text)            

其中,Trim函数功能为删掉字段首尾空格,Mid, Left函数为取值函数,其意义和Excel中的同名函数一致。

2.2  启动并发送HTTPS协议

   当我们获得了文献的关键数据之后,就可以启动HTTPS协议了,具体过程如下:

link= "https://DOI.crossref.org/servlet/query?usr=用户名&pwd=密码&qdata=" & “|” & j & “|”& “|” & vol & “|” & “|” & fpage & “|” & year & “|”& “|” & “|”    ‘组合为HTTPS协议网址

Sethttp = CreateObject("Microsoft.XMLHTTP")    

http.Open"POST", link, False                  

http.send""            ‘发送http协议请求网址

2.3  获取返回数据并解析DOI信息

Ifhttp.Status = 200 Then        

re= http.responsetext       ‘获取http协议返回文本

DOI= Trim(Mid(re, InStrRev(re, "|") + 1, Len(re) - InStrRev(re,"|") - 1))   ‘解析DOI数据

ref.SetRangeref.End-1, ref.End – 1            ‘创建写入位置

ref.Select

ActiveDocument.Hyperlinks.Add

Anchor:=Selection.Range,Address:="http://dx.doi.org/"& DOI, TextToDisplay:=" [CrossRef]"                    

EndIf

3 主函数过程

综合上述代码,主函数过程如下:

SubDOI()

Setmyrange = Selection.Range    ‘对选定的段落进行操作

ForEach i In myrange.Paragraphs  

Set ref =i.Range                              

If ref Like"*.*.*,*,*:*" Then            

x = ref.Text           ‘提取识别段落的文本

“2.1  解析文献元数据相关代码

“2.2  启动并发送HTTPS协议相关代码

“2.3  获取返回数据并解析DOI信息相关代码

    End If

Next

End Sub

需要说明的是,必须先选中参考文献,才可以运行VBA程序,有关VBA程序的函数解释、界面介绍、录制宏及运行程序等方面可以参考文献[7], 经测试,运行50条参考文献查询大概需要1分钟,对注册过DOI的期刊文献的命中成功率几乎达到100%最终运行程序后的结果如图2所示, 图中CrossRef已经自动带上了DOI的超链接。


2  利用VBA程序和HTTPS协议获取文献DOI信息的示意图

4  总结

本文利用VBA程序和HTTPS协议成功自动解析出了参考文献的DOI信息,需要说明的是,由于期刊均有自己特有的文献体例格式,所以本文中的拆分规则不可能也没必要去适应所有期刊的体例格式,这里只是提供一个解决问题的思路,具体问题还需具体分析,比如还是上面那篇文献,有的期刊体例格式可能是如下形式:“P. H. Roberts,and G. A. Glatzmaier, A three-dimensional self-consistent computer simulationof a geomagnetic field reversal, Nature 377, 203 (1995)”,经分析,此体例可以拆分为【*and 作者, 文题, 刊名, 首页码 ()】,那么转换为程序语言则需要首先识别出【*and*, *, * (*)】这样的段落, 然后再按照这个数据特点进行进一步的拆分。

此外,注册为CrossRef网站的会员非常必要,相比普通email用户,会员用户获取该网站的引文信息更加便捷,几乎没有任何限制,并且可以免费获得CrossRef的技术支持。

5  参考文献

  1. 任瑞娟, 孙玲玲, 赵然, . DOI 在网络信息资源管理中的应用价值分析[J]. 情报科学, 2010, 28(8): 1143-1146,1228

  2. 张欣欣, 缪弈洲, 张月红. CrossRef文本和数据挖掘服务——《浙江大学学报(英文版)》的实践[J]. 中国科技期刊研究, 2015, 26(6): 594-599

  3. 信息与文献参考文献著录规则: GB/T 7714—2015 [s]. 北京: 中国标准出版社, 2015

  4. 陈浩元. GB/T 7714新标准对旧标准的主要修改及实施要点提示[J]. 编辑学报, 2015(04): 339-343

  5. 刘铁英, 张小白, 叶慧玲. Word VBA及宏在科技期刊编辑中的应用[J]. 编辑学报, 2007, 19(1): 47-48

  6. 游中胜, 李若溪, 欧红叶, . 利用 WordVBA及宏实现编校信息快速查询[J]. 编辑学报, 2009, 21(1): 72-73

  7. 王玥, 毛善锋, 刘谦. Word文档中通过CrossRef自动查询与整合英文参考文献DOI的实践[J]. 中国科技期刊研究, 2013, 24(2):333-337

  8. 黄美君, 姜爱蓉. 合适的链接最佳的服务——SFXCrossRef/DOI交互作用探讨[J]. 图书情报工作, 2006, 50(3):93-96

  9. 李广建, 李亚子, 蒋君. OpenURL标准的版本演化及比较分析[J]. 图书馆杂志, 2009, 28(7):53-59




https://blog.sciencenet.cn/blog-306503-1012643.html

上一篇:《中国科学:物理学 力学 天文学》《国家科学评论》诚聘科学编辑
下一篇:《中国科学: 物理学 力学 天文学》出版“风能专辑“
收藏 IP: 219.238.6.*| 热度|

0

该博文允许注册用户评论 请点击登录 评论 (0 个评论)

数据加载中...
扫一扫,分享此博文

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-4-20 08:52

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部