2012-06-29 38 views
0

我想創建一個工具,我可以用它自動解析某些文本。 我正在使用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

回答

1

這是可行的任務。

我不代碼在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