问题背景:
最近在尝试爬取kdd等计算机顶会的发文情况(如author、title、abstract等内容),尝试进行构建社会网络,并且使用相关理论来分析,如三元闭包的情况,同质性的情况,在对kdd2017的作者信息进行处理的时候发现以下几种情况
- 有的作者名是德语,如Christian Böhm (Ludwig-Maximilians-Universität München)
- 有的人名不是常见的First Name Last Name的结构,如Patrick P. C. Lee (The Chinese University of Hong Kong)
- 还有的某些亚裔学者的名字可能存在连接符,如Keng-Hao Chang (Microsoft)
- 此外还有对姓氏使用缩写的情况,如D. Sculley (Google, Inc.)
故无法使用单一的正则表达式直接匹配人名,而所有作者信息的后面都有(该作者来自的机构),因此考虑使用正则表达式对括号部分进行匹配再在此基础上使用re.sub方法去掉括号部分
处理方法:
如对author=Christian Böhm (Ludwig-Maximilians-Universität München)
进行处理
import re
pattern = '.*(\(.*\))' # 此处对括号加转义符号以避免Python认为我在添加子块
match = re.match(pattern=pattern, string=author)
if match:
temp = match.group(0)
print(re.sub(pattern=match.group(1), repl='', string=temp))
# 此时输出的值是Christian Böhm ()而非我们想要的Christian Böhm
# 再度尝试发现使用sub方法的时候在pattern那里对match.group(1)添加括号即可
print(re.sub(pattern='\('+match.group(1)+'\)', repl='', string=temp))
# 此时的输出就是Christian Böhm了,达到了我们的目的
# 推测是因为只使用match.group(1)的时候它只会提取内容,认为括号是子块
网友评论