从科学文章中解析作者信息的正则表达式

从科学文章中解析作者信息的正则表达式

问题描述:

我想创建一个工具,我可以用它自动解析某些文本。 我正在使用JavaScript和正则表达式。从科学文章中解析作者信息的正则表达式

例如,我有这样的文字:

Aa Aaa 1, Bb Bbb 2 and Cc Ccc 1 
1 Institut xx Xx, Some University, Xxxx 14, US-10000 NewYork, USA; E-Mails: [email protected]; [email protected] 
2 Institut zz Zzz, Some University2, Zzzz 20, US-10000 NewYork, USA; E-Mail: [email protected] 

而且我想解析这些信息

对于每一个作者(名字和姓氏):

  • 隶属关系
  • 电子邮件地址

所以在我的例子,我想有:

Aa Aaa - Institut xx Xx, Some University, Xxxx 14, US-10000 NewYork, USA - [email protected] 

Bb Bbb - Institut zz Zzz, Some University2, Zzzz 20, US-10000 NewYork, USA - [email protected] 

Cc Ccc - Institut xx Xx, Some University, Xxxx 14, US-10000 NewYork, USA - [email protected] 

看起来很coplicated,所以如果我认为我shuld在几个简单的问题分开我的问题,让我知道。

谢谢。

+1

你不能用正则表达式来做所有事情,不管你信不信,我试着用javascript和正则表达式来构建一个核弹,但是由于一些未知的原因,它不起作用。 ( – gdoron

+0

)如果所使用的引用风格是一致的,那么这不应该是一个问题。然而,在一般情况下,解析纸质引用是一个不平凡的问题,不能通过正则表达式解决,而是要求高级自然语言处理方法 – Qnan

+0

当然,这些并不完全是引用,但它们本质上是相似的,可能会带来类似的挑战。 – Qnan

这是可行的任务。

我不代码在JavaScript,但我希望从SO有人会复制下面的Perl代码为您:

$_ = "\n\n" . $input; 
1 while s/^(.*?\n?)\n{1,2}\s*([^\d]+)\s+(\d+)\s*?(?:\s*and|[,\n\s])(.*?)(?<=\n)(\3\s+)([^\n]*)(\n.*$|$)/$1$2 - $6\n\n$4$5$6$7/gs; 
s/\n\n.*$//s; 
print $_; 

看到和测试Perl代码here