【发布时间】:2009-06-09 14:45:39
【问题描述】:
我正在尝试将 PDF 页面上的文本解析成句子,但这比我预期的要困难得多。有很多特殊情况需要考虑,例如包含句点但不一定结束句子的首字母、小数、引号等。
我很好奇这里是否有人熟悉 C 或 C++ 的 NLP 库,可以帮助我完成这项任务或提供任何建议?
感谢您的帮助。
【问题讨论】:
我正在尝试将 PDF 页面上的文本解析成句子,但这比我预期的要困难得多。有很多特殊情况需要考虑,例如包含句点但不一定结束句子的首字母、小数、引号等。
我很好奇这里是否有人熟悉 C 或 C++ 的 NLP 库,可以帮助我完成这项任务或提供任何建议?
感谢您的帮助。
【问题讨论】:
这是一个叫做句界消歧的问题。它的Wikipedia page 列出了一些库,但我不确定它们中的任何一个是否可以从 C 中轻松调用。
你可以找到很多关于句子边界消歧理论的论文。 Unicode 标准,在Unicode Standard Annex #29 - Unicode Text Segmentation 中也定义了一个简单的句子边界检测算法。
【讨论】:
Sentence boundary disambiguation (SBD) 是 NLP 领域的核心问题。不幸的是,我过去发现和使用的不是 C 语言(因为它不是基于字符串的任务最喜欢的语言,除非速度是一个主要问题)
管道
如果可能的话,我会创建一个简单的管道 - 如果在 Unix 系统上这应该不是问题,但即使你在 Windows 上使用脚本语言,你也应该能够填补空白。这意味着 SBD 可能是完成这项工作的最佳工具,而不仅仅是您可以找到的用于语言 Z 的唯一 SBD。例如,
./pdfconvert | SBD | my_C_tool > ...
这是我们在工作中做事的标准方式,除非你有比你说的更严格的要求,否则应该没问题。
工具
关于你可以使用的工具,
模型和训练
现在,其中一些工具可能会为您提供开箱即用的良好结果,但有些可能不会。 OpenNLP 包含一个开箱即用的English sentence detection 模型,它可能对您有用。但是,如果您的域与训练工具的域显着不同,则它们可能表现不佳。例如,如果他们接受过报纸文字方面的培训,他们可能非常擅长这项任务,但在字母方面却很糟糕。
因此,您可能希望通过提供示例来训练 SBD 工具。每个工具都应该记录这个过程,但我会警告你,这可能需要一些工作。这将需要您在文档 X 上运行该工具,检查并手动修复任何不正确的拆分,并将正确拆分的文档 X 返回给工具进行训练。根据文档的大小和所涉及的工具,您可能需要对一个或一百个文档执行此操作,直到获得合理的结果。
祝你好运,如果您有任何问题,请随时提出。
【讨论】:
这是一种自然语言,而不是计算机语言,解析问题。因此,永远不会有一个简单的答案。但是,它们可能是您可以应用的启发式方法,如果我们知道您为什么要将 PDF 拆分为句子以及在获得句子后您想对这些句子做什么,我们可以推荐这种方法?
【讨论】:
前段时间我也有同样的要求。我尝试了几种解决方案。其中最好的是 splitta (http://code.google.com/p/splitta/)。它适用于我扔给它的所有边缘条件。 splitta 的蟒蛇。
我也尝试过 sentrick (java)。 http://www.denkselbst.de/sentrick/index.html
很遗憾,我没有尝试过的所有选项的完整列表。
【讨论】: