我正在使用Python从路透社中提取某些公司的信息。我已经能够从this page
获得官员/执行官姓名,传记和补偿现在,我想从传记部分中提取以前的职位名称和公司,看起来像这样:
先生。 Donald T. Grimes自2008年5月起担任Wolverine World Wide,Inc。的高级副总裁兼首席财务官和财务主管。从2007年至2008年,他担任Keystone Automotive Operations,Inc。的执行副总裁兼首席财务官。汽车配件和设备经销商。在加入Keystone之前,Grimes先生曾在Brown-Forman Corporation担任过一系列高级公司和部门财务职位,该公司是优质葡萄酒和烈酒的制造商和营销商。在Brown-Forman工作期间,Grimes先生于2006年至2007年担任饮料金融副总裁兼董事; 2003年至2006年任副总裁,企业规划与分析总监;并于1999年至2003年担任Brown-Forman Spirits America的高级副总裁兼首席财务官。
我可以使用简单的正则表达式来获取from和to years,但我对如何编写正则表达式来获取标题和公司名称感到茫然。我知道字符串格式不一致,所以我会给出一个适用于至少70%的案例的答案。这是我想要的输出:
2007-2008, executive vice president and chief financial officer, Keystone Automotive operations
答案 0 :(得分:2)
您要解决的问题是众所周知和研究的,如果您谷歌搜索“命名实体提取”和“关系提取”这些术语,您会发现大量的研究论文描述方法和算法。一些好的起点是:
“使用Python进行自然语言处理”一书的第7章,实际上整本书可能会有所帮助。 Chapter online here
本文“dd Novel Algorithms for Relationship Mining将采矿职称和组织描述为其中一个例子。
这些只是我发现的一些有趣的链接,比这些更多,可能更好,但这应该让你开始。
答案 1 :(得分:1)
我不认为你可以使用一个正则表达式,除非它真的很讨厌。我认为解决方法可能是Natural Language Processing。当然有这样的包,但使用它们可能并不简单。
基本上你想要一个像“X is / was Y”这样的句子,并找出哪个部分是名称,哪个部分是职称名单,哪些部分是无关紧要的。也许寻找大写的单词序列或像“and”和“of”这样的小词?
(?:\u\w+)( (?:\u\w*)|(?:of)|(?:and))* #Note the space
\u
表示下一个单个字符(\w+
组的第一个字符)是大写的。没有测试过,但看起来应该可行。这可能是一个非常重要的问题。