【发布时间】:2016-10-22 12:45:59
【问题描述】:
我有一个项目,我需要从大量文章中提取引文。在这里,引用是指人们所说的事情,例如:Alen 说“要提取的文本”。我将 NLTK 用于其他与 NLP 相关的任务,因此任何使用 NLTK 或任何类型的 Python 库的解决方案都会非常有用。
谢谢
【问题讨论】:
我有一个项目,我需要从大量文章中提取引文。在这里,引用是指人们所说的事情,例如:Alen 说“要提取的文本”。我将 NLTK 用于其他与 NLP 相关的任务,因此任何使用 NLTK 或任何类型的 Python 库的解决方案都会非常有用。
谢谢
【问题讨论】:
正如 Mayur 所说,您可以使用正则表达式来获取引号之间的所有内容
list = re.findall("\".*?\"", string)
您会遇到的问题是,引号之间可能有大量实际上不是引号的内容。
如果你在做学术文章,你可以在结束引号后查找一个数字来获取脚注编号。否则,对于非学术文章,也许您可以运行以下内容:
"(said|writes|argues|concludes)(,)? \".?\""
可以更精确,但可能会丢失引号,例如块引号(块引号无论如何都会给您带来问题,因为它们可以在右引号之前包含换行符)
至于使用 NLTK,除了 wordnet 用于查找“said”的同义词之外,我想不出有什么帮助。
【讨论】:
这符合模式,即您要查找的数据始终位于引号"" 之间。简单来说,可以使用regex 进行模式匹配。
我们以这个例子she said " DAS A SDASD sdasdasd SADSD", " SA23 DSD " ASDAS "ASDAS1 3123$ %$%"
适用于您的基本示例的正则表达式是 -
list = re.findall("\".*?\"", string)
List 给我们['" DAS A SDASD SADASD SADSD"', '" SA23 DSD "', '"ASDAS1 3123$ %$%"']
这里,.*? 匹配任何字符(换行符除外),并且模式匹配引号(以 \" 开头并以 \" 结尾)。
请注意引号内的引号会破坏此代码。你不会得到预期的输出。
【讨论】:
I need to extract quotations from a huge set of articles。所以我的假设是一个合理的假设。我会 +1 你为答案添加一些好的东西。