Кто-нибудь может поделиться простым примером использования Mathematica и ученого Google для извлечения академической исследовательской информации - PullRequest
4 голосов
/ 24 мая 2011

Как я могу использовать Mathematica и Google scholar для определения количества статей, опубликованных человеком в 2011 году?

1 Ответ

6 голосов
/ 24 мая 2011

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 возвращает множество хитов, в том числе цитаты, книги, перепечатки и многое другое. Так что на самом деле это не очень полезно для подсчета.

Немного объяснений:

Ученый разбивает инициалы и имена авторов и соавторов по нескольким author: полям в сочетании с +. Об этом заботится часть кода StringDrop[StringJoin @@ ("author:" <> # <> "+" & /@ StringSplit[author]), -1]. StringDrop удаляет последний +.

Часть Stringcases содержит большой текстовый шаблон, который в основном ищет текст, который ученый помещает в верхней части каждой страницы результатов, и который содержит количество совпадений. Этот номер затем изолируется и возвращается.

...