2011-10-13 93 views
2

我從使用Python提取有關某些公司的信息。我已經能夠從​​從字符串中提取業務名稱和時間段

拿到主任/主管的名字,人物傳記,並賠償現在,我想從傳記部分,它看起來是這樣的提取以前的位置職務和公司:

Donald T. Grimes先生自2008年5月起擔任Wolverine World Wide,Inc.的高級副總裁,首席財務官兼財務主管。從2007年至2008年,他擔任Keystone Automotive Operations,Inc.的執行副總裁兼首席財務官。 ,汽車配件和設備的分銷商。在Keystone之前,Grimes先生在布朗福爾曼公司擔任高級企業和部門財務職位,高級葡萄酒和烈酒的製造商和營銷商。在Brown-Forman工作期間,Grimes先生曾擔任2006年至2007年的副總裁,飲料金融總監; 2003年至2006年擔任企業規劃與分析部副總裁兼董事;高級副總裁,財務總監布朗 - 福曼烈酒美國從1999年到2003年

我可以用簡單的regex從和年拿到的,但我在關於如何編寫正則表達式來虧損獲得標題和公司名稱。我知道字符串格式不一致,所以我會採取適用於至少70%的案例的答案。這裏是我想要的輸出:

2007-2008, executive vice president and chief financial officer, Keystone Automotive operations 

回答

2

你正在努力解決的問題是衆所周知和研究的,你會發現大量的研究論文描述的方法和算法,如果谷歌的術語「命名實體提取」和「關係提取」一些好的起點要點如下:

這些都只是一些鏈接,我發現有趣的是,有更多,也許比這些更好,但這應該讓你開始。

+0

bdk,非常感謝您的周到和詳細的答覆。我在想同樣的觀點。我用模式庫來提取形容詞。我也會爲此達成目的。 [http://www.clips.ua.ac.be/pages/pattern] – karlos

1

我不認爲會有這樣一個單一的正則表達式,除非它真的很討厭。我認爲這個解決方案可能是Natural Language Processing。當然,這有些軟件包,但使用它們可能並不簡單。

基本上你想要一個像「X is/was Y」這樣的句子,並找出哪一部分是一個名字,哪一部分是職位名單,哪些部分是不相關的。也許可以查找大寫字母或小字如「and」和「of」的單詞序列?

(?:\u\w+)((?:\u\w*)|(?:of)|(?:and))* #Note the space 

\u意味着未來單個字符(\w+組的第一個字符)是大寫的。沒有測試過,但它似乎應該工作。這可能是一個不平凡的問題。

+0

andronikus,謝謝你的答覆。你是對的:正則表達式並不是正確的解決方案,這也是一個不平凡的問題,正如bdk也提出的那樣。 – karlos