2016-06-21 59 views
-3

我有一个项目,其中需要从大量文章中提取引文。在这里,引用我指的是人们所说的话,例如:Alen说“要提取的文本”。我使用NLTK来处理其他NLP相关任务,因此任何使用NLTK或任何类型的Python库的解决方案都将非常有用。如何从文本中使用NLTK提取引文

感谢

回答

0

这有资格作为一种模式,即你正在寻找的数据总是引号""之间。简而言之,您可以使用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$ %$%"']

这里,.*?匹配任何字符(除换行符)和模式匹配从字面上引号(开头\"和结尾\")。

请注意引号中的引号会打破此代码。你不会得到预期的输出。

+0

这会在引号之间拾取任何东西。根据你正在评估的文本,你会选择一堆没有报告过的垃圾......只是用引号括起来的东西就像字母“A”,“晦涩”这个词的意思是......等等。 – Joseph

+0

我工作的前提是OP正在处理**具有有意义对话的结构化数据**,因为OP说'我需要从大量文章中提取引文。所以我的假设是一个合理的假设。我会+1为你添加一些好的答案。 –

1

正如MAYUR提到的,你可以做一个正则表达式拿起报价

list = re.findall("\".*?\"", string) 

你会碰到的是可以有一个是竟然出奇大量的引号之间的事情的问题之间的一切不是报价。

如果您正在学术论文,您可以在收盘后查找一个数字以获取脚注编号。否则与非学术文章,也许你可以运行类似:

"(said|writes|argues|concludes)(,)? \".?\"" 

可以更精确,但如引用文字(引用文字风险损失的报价会引起您的问题反正,因为他们可以包括在右引号之前有一个换行符)

至于使用NLTK,我想不出有什么可以帮助查找“说”的同义词,除了可能是wordnet。