如何使用 Mathematica 和 Google Academic 查找一个人在 2011 年发表的论文数量?
问问题
604 次
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 回答