【发布时间】:2014-12-16 00:29:01
【问题描述】:
棘手的正则表达式问题:我想使用正则表达式从有关镇压的新闻句子中提取信息。以下是一些示例:
doc1 = "5 young students arrested"
doc2 = "10 rebels were reported killed"
我想根据实体和结果列表匹配句子:
entities = ['students','rebels']
outcomes = ['arrested','killed']
如何使用正则表达式提取 0-99999 的参与者数量、任何实体、任何结果,同时忽略随机文本(例如“年轻”或“被报告”)?这就是我所拥有的:
re.findall(r'\d{1,5} \D{1,50}'+ '|'.join(entities) + '\D{1,50}' + '|'.join(outcomes),doc1)
即一个数字、一些可选的随机文本、一个实体、一些更多的可选随机文本和一个结果。 出了点问题,我认为是因为 OR 语句。感谢您的帮助!
【问题讨论】:
-
这是自然语言处理中的常见任务。你应该用谷歌搜索一下,看看它是如何在 Python 中正确完成的。我过去使用过 Stanford Parser (Java),这为我节省了很多时间:nlp.stanford.edu/software/lex-parser.shtml
-
这不是你应该纯粹用正则表达式做的事情
-
作为替代解决方案,您可以查看 nltk。它提供了标记单词的功能(用语法信息注释单词),然后您可以查找实体、被动语态和数字的组合。
-
感谢您的快速解答! @ReutSharabani,当您知道感兴趣的特定实体和操作时,即使使用定制的应用程序,Stanford Parser 是否更好?我认为可能不是,但我可能(肯定)是错的。
-
@user1060859,虽然您可以使用正则表达式进行快速破解,但如果它只是您正在研究的东西 - NLP 工具是正确的工具。您需要进行词干提取、句子提取、标记化、忽略语法错误等等。这些都已经被专业人士解决了,为什么还要再解决呢? 请使用
nltk。
标签: python regex parsing information-extraction