Sjo*_*ies 6

Google学术搜索并不适合这一目标,因为它没有正式的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"
Run Code Online (Sandbox Code Playgroud)

添加ToExpression如果你不喜欢的字符串结果.如果要限制发布年份,可以添加&as_ylo=2011&as_yhi=2011&到搜索字符串并相应地更改开始年份和结束年份.

请注意,具有流行名称的作者会产生大量虚假命中,因为无法唯一地识别单个作者.此外,学者回归各种各样的点击,包括引用,书籍,重印等.所以,实际上,这对计数并不是很有用.

一点解释:

学者将作者和共同作者的名字缩写和名称分成几个author:字段和+.StringDrop[StringJoin @@ ("author:" <> # <> "+" & /@ StringSplit[author]), -1]代码的一部分负责这一点.在StringDrop删除最后+.

Stringcases部分包含一个大文本模式,它基本上搜索学者放置在每个结果页面顶部的文本,其中包含命中数.然后隔离并返回该号码.