【问题标题】:Parsing text into sentences?将文本解析成句子?
【发布时间】:2009-06-09 14:45:39
【问题描述】:

我正在尝试将 PDF 页面上的文本解析成句子,但这比我预期的要困难得多。有很多特殊情况需要考虑,例如包含句点但不一定结束句子的首字母、小数、引号等。

我很好奇这里是否有人熟悉 C 或 C++ 的 NLP 库,可以帮助我完成这项任务或提供任何建议?

感谢您的帮助。

【问题讨论】:

    标签: c++ c parsing nlp


    【解决方案1】:

    这是一个叫做句界消歧的问题。它的Wikipedia page 列出了一些库,但我不确定它们中的任何一个是否可以从 C 中轻松调用。

    你可以找到很多关于句子边界消歧理论的论文。 Unicode 标准,在Unicode Standard Annex #29 - Unicode Text Segmentation 中也定义了一个简单的句子边界检测算法。

    【讨论】:

      【解决方案2】:

      Sentence boundary disambiguation (SBD) 是 NLP 领域的核心问题。不幸的是,我过去发现和使用的不是 C 语言(因为它不是基于字符串的任务最喜欢的语言,除非速度是一个主要问题)

      管道

      如果可能的话,我会创建一个简单的管道 - 如果在 Unix 系统上这应该不是问题,但即使你在 Windows 上使用脚本语言,你也应该能够填补空白。这意味着 SBD 可能是完成这项工作的最佳工具,而不仅仅是您可以找到的用于语言 Z 的唯一 SBD。例如,

      ./pdfconvert | SBD | my_C_tool > ...
      

      这是我们在工作中做事的标准方式,除非你有比你说的更严格的要求,否则应该没问题。

      工具

      关于你可以使用的工具,

      • 我建议使用 MXTERMINATOR,这是一个使用最大熵建模的 SBD 工具,因为我的主管最近在他们自己的工作中使用了它。根据他们的说法,它确实错过了一些句子拆分,但这很容易被sed script 修复。他们在天文论文上做SBD。 main site 现在出现了,但有一个可用的 FTP 镜像 here
      • OpenNLP 使用 Java 中的最大熵建模 (JavaDoc) 重新实现了上述算法,并且在其背后似乎有一个更强大的社区。​​li>
      • Sentrick 和许多其他人也存在。有关更多信息,请参阅可能有用的旧列表 here

      模型和训练

      现在,其中一些工具可能会为您提供开箱即用的良好结果,但有些可能不会。 OpenNLP 包含一个开箱即用的English sentence detection 模型,它可能对您有用。但是,如果您的域与训练工具的域显着不同,则它们可能表现不佳。例如,如果他们接受过报纸文字方面的培训,他们可能非常擅长这项任务,但在字母方面却很糟糕。

      因此,您可能希望通过提供示例来训练 SBD 工具。每个工具都应该记录这个过程,但我会警告你,这可能需要一些工作。这将需要您在文档 X 上运行该工具,检查并手动修复任何不正确的拆分,并将正确拆分的文档 X 返回给工具进行训练。根据文档的大小和所涉及的工具,您可能需要对一个或一百个文档执行此操作,直到获得合理的结果。

      祝你好运,如果您有任何问题,请随时提出。

      【讨论】:

        【解决方案3】:

        这是一种自然语言,而不是计算机语言,解析问题。因此,永远不会有一个简单的答案。但是,它们可能是您可以应用的启发式方法,如果我们知道您为什么要将 PDF 拆分为句子以及在获得句子后您想对这些句子做什么,我们可以推荐这种方法?

        【讨论】:

        • 我将 PDF 拆分为句子以用于“回流”。将从我删除的所有句子中创建一个新的标记 PDF,以便以后更轻松地进行操作。
        • 您的问题不应该是“如何转换 PDF 以支持回流?”或类似的东西?
        • 回流不是一个已解决的问题,因此我试图将其分解为多个部分。首先是得到一个格式正确的句子。
        【解决方案4】:

        前段时间我也有同样的要求。我尝试了几种解决方案。其中最好的是 splitta (http://code.google.com/p/splitta/)。它适用于我扔给它的所有边缘条件。 splitta 的蟒蛇。

        我也尝试过 sentrick (java)。 http://www.denkselbst.de/sentrick/index.html

        很遗憾,我没有尝试过的所有选项的完整列表。

        【讨论】:

          猜你喜欢
          • 2011-05-21
          • 1970-01-01
          • 2010-10-26
          • 1970-01-01
          • 2017-04-18
          • 2011-11-03
          • 2019-10-18
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多