4

如何使用 Mathematica 和 Google Academic 查找一个人在 2011 年发表的论文数量?

4

1 回答 1

6

Google Scholar 不太适合这个目标,因为它没有正式的 API AFAIK。它也不提供结构化(例如 XML)格式的结果。所以,我们不得不求助于一个快速(而且非常非常脆弱!)的文本模式匹配黑客,比如:

 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&到搜索字符串并适当地更改开始和结束年份。

请注意,具有流行名称的作者会产生大量虚假点击,因为无法唯一识别单个作者。此外,Scholar 还会返回各种热门内容,包括引用、书籍、重印等。所以,真的,这对于计数不是很有用。

一点解释:

Scholar 将作者和合著者的首字母和姓名拆分为多个author:字段,并加上 +。代码的StringDrop[StringJoin @@ ("author:" <> # <> "+" & /@ StringSplit[author]), -1]一部分负责这一点。StringDrop删除最后一个+.

Stringcases部分包含一个大文本模式,它基本上搜索 Scholar 放置在每个结果页面顶部的文本,其中包含点击次数。然后这个号码被隔离并返回。

于 2011-05-24T16:40:01.563 回答