Извлечение названий университетов из данных о принадлежности в Pubmed с помощью R

Я использовал чрезвычайно полезный пакет rentrez в R для получения информации об авторе, идентификаторе статьи и принадлежности автора из базы данных Pubmed. Это отлично работает, но теперь я хотел бы извлечь информацию из поля принадлежности. К сожалению, поле аффилиации представляет собой широко неструктурированную, не стандартизированную строку с различными типами информации, такой как название университета, название факультета, адрес и многое другое, разделенное запятыми. Поэтому для получения любой полезной информации из этого поля необходим метод анализа текста.

Я попробовал пакет easyPubmed в сочетании с rentrez, и хотя пакет easyPubmed может извлекать некоторую информацию из поля принадлежности (например, адрес электронной почты, что очень полезно), насколько мне известно, он не может извлечь название университета. Я также попробовал пакет pubmed.mineR, но, к сожалению, он также не обеспечивает извлечение названия университета. Я начал экспериментировать с функциями grep и regex, но, поскольку я не являюсь экспертом по R, я не мог заставить это работать.

Мне удалось найти очень похожие темы, решающие проблему с python:

Регулярное выражение для извлечения названий колледжей, университетов и институтов?

Как извлечь университет/школу /название колледжа из строки в python с использованием регулярного выражения?

Но, к сожалению, я не знаю, как преобразовать функцию регулярного выражения python в функцию регулярного выражения R, поскольку я не знаком с python.

Вот некоторые примеры данных:

PMID = c(121,122,123,124,125)
author=c("author1","author2","author3","author4","author5")
Affiliation = c("blabla,University Ghent,blablabla", "University Washington, blabla, blablabla, blablabalbalba","blabla,University of Florence,blabla", "University Chicago, Harvard University", "Oxford University")
df = as.data.frame(cbind(PMID,author,Affiliation))

df
PMID  author                                              Affiliation
1  121 author1                        blabla,University Ghent,blablabla
2  122 author2 University Washington, blabla, blablabla, blablabalbalba
3  123 author3                        blabla,University of Florence,blabla
4  124 author4                        University Chicago, Harvard University
5  125 author5                        Oxford University

Что я хотел бы получить:

PMID  author    Affiliation                        University
1  121 author1  blabla,University Ghent,blablabla  University Ghent
2  122 author2  University Washington,ba, bla, bla University Washington
3  123 author3  blabla,University Florence,blabla  University of Florence
4  124 author4  University Chicago, Harvard Univ   University Chicago, Harvard University
5  125 author5  Oxford University                  Oxford University

Пожалуйста, извините, если решение уже есть в сети, но я, честно говоря, много гуглил и не нашел четкого решения для R. Буду очень благодарен за любые подсказки и решения этой задачи.


person maros89    schedule 07.05.2019    source источник


Ответы (1)


В общем, выражения регулярных выражений можно портировать на R с некоторыми изменениями. Например, используя ссылку php, которую вы включили, вы можете создать новую переменную с извлеченным текстом, используя это выражение регулярного выражения и изменив только escape-символ ("\\" вместо "\"). Итак, используя пакеты dplyr и stringr:

library(dplyr)
library(stringr)
df <- df %>% 
  mutate(Organization=str_extract(Affiliation,
      "([A-Z][^\\s,.]+[.]?\\s[(]?)*(College|University|Institute|Law School|School of|Academy)[^,\\d]*(?=,|\\d)"))
person panchtox    schedule 07.05.2019