我一直在R中使用极其有用的rentrez包,以从Pubmed数据库中获取有关作者,文章ID和作者隶属关系的信息。效果很好,但现在我想从隶属字段中提取信息。不幸的是,从属领域是广泛的非结构化,不是标准化的字符串,其中包含各种类型的信息,例如大学名称,部门名称,地址以及更多以逗号分隔的信息。因此,文本挖掘方法对于从该字段获取任何有用的信息是必要的。
我尝试将easyPubmed软件包与rentrez结合使用,尽管easyPubmed软件包可以从隶属字段中提取一些信息(例如,非常有用的电子邮件地址),据我所知它无法提取大学名称。我也尝试了pubmed.mineR软件包,但不幸的是,这也没有提供大学名称提取。我开始尝试grep和regex函数,但由于我不是R专家,所以我无法完成这项工作。
我能够找到非常相似的线程来解决python的问题:
Regex for extracting names of colleges, universities, and institutes?
How to extract university/school/college name from string in python using regular expression?
但是不幸的是,由于我不熟悉python,所以我不知道如何将python regex函数转换为R regex函数。
以下是一些示例数据:
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
如果在线上已经有解决方案,请感到抱歉,但是老实说,我在Google上搜索了很多,并且没有找到R的任何明确解决方案。对于此任务的任何提示和解决方案,我将非常感谢。
答案 0 :(得分:1)
通常,可以将正则表达式进行一些更改后移植到R中。例如,使用包含的php链接,您可以使用该正则表达式表达式创建一个带有提取文本的新变量,并且仅更改转义字符(“ \\”而不是“ \”)。因此,使用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)"))