如何使用Mathematica和Google学者查找2011年发布的论文数量?
答案 0 :(得分:6)
Google Scholar不太适合这个目标,因为它没有正式的API AFAIK。它也不以结构化(例如XML)格式提供结果。因此,我们必须采用快速(非常非常脆弱!)的文本模式匹配hack,如:
searchGoogleScholarAuthor[author_String] :=
First[StringCases[
Import["http://scholar.google.com/scholar?start=0&num=1&q=" <>
StringDrop[
StringJoin @@ ("author:" <> # <> "+" & /@
StringSplit[author]), -1] <> "&hl=en&as_sdt=1,5"], ___ ~~
"Results" ~~ ___ ~~ "of about" ~~ Shortest[___] ~~
p : Longest[(DigitCharacter | ",") ..] ~~ ___ ~~ "." ~~ ___ ~~
"(" ~~ ___ :> p]]
In[191]:= searchGoogleScholarAuthor["A Einstein"]
Out[191]= "6,400"
In[190]:= searchGoogleScholarAuthor["Einstein"]
Out[190]= "9,400"
In[192]:= searchGoogleScholarAuthor["Wizard"]
Out[192]= "197"
In[193]:= searchGoogleScholarAuthor["Vries"]
Out[193]= "70,700"
如果您不喜欢字符串结果,请添加ToExpression
。如果要限制发布年份,可以将&as_ylo=2011&as_yhi=2011&
添加到搜索字符串并更改开始年份和结束年份
适当。
请注意,具有流行名称的作者会因为无法唯一识别单个作者而产生大量虚假命中。此外,学者回归各种各样的点击,包括引用,书籍,重印等。所以,实际上,这对计算来说并不是很有用。
一点解释:
学者将作者和共同作者的首字母和名称分成几个author:
字段和+。代码的StringDrop[StringJoin @@ ("author:" <> # <> "+" & /@ StringSplit[author]), -1]
部分负责处理。 StringDrop
删除了最后一个+
。
Stringcases
部分包含一个大文本模式,它基本上搜索学者放置在每个结果页面顶部的文本,其中包含命中数。然后将此号码隔离并返回。