【问题标题】:How to extract quotations from text using NLTK [duplicate]如何使用 NLTK 从文本中提取引号 [重复]
【发布时间】:2016-10-22 12:45:59
【问题描述】:

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

谢谢

【问题讨论】:

    标签: python regex nlp nltk


    【解决方案1】:

    正如 Mayur 所说,您可以使用正则表达式来获取引号之间的所有内容

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

    您会遇到的问题是,引号之间可能有大量实际上不是引号的内容。

    如果你在做学术文章,你可以在结束引号后查找一个数字来获取脚注编号。否则,对于非学术文章,也许您可​​以运行以下内容:

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

    可以更精确,但可能会丢失引号,例如块引号(块引号无论如何都会给您带来问题,因为它们可以在右引号之前包含换行符)

    至于使用 NLTK,除了 wordnet 用于查找“said”的同义词之外,我想不出有什么帮助。

    【讨论】:

      【解决方案2】:

      这符合模式,即您要查找的数据始终位于引号"" 之间。简单来说,可以使用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$ %$%"']

      这里,.*? 匹配任何字符(换行符除外),并且模式匹配引号(以 \" 开头并以 \" 结尾)。

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

      【讨论】:

      • 这会选取引号之间的任何内容。根据您正在评估的文本,您会捡起一堆没有报告的垃圾……只是用引号括起来的东西,比如字母“A”,“晦涩”这个词的意思是……等等。
      • 我一直假设 OP 正在处理 具有有意义对话的结构化数据,因为 OP 说 I need to extract quotations from a huge set of articles。所以我的假设是一个合理的假设。我会 +1 你为答案添加一些好的东西。
      猜你喜欢
      • 1970-01-01
      • 2020-10-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多