将文本解析成句子?

时间:2009-06-09 14:45:39

标签: c++ c parsing nlp

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

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

感谢您的帮助。

4 个答案:

答案 0 :(得分:6)

这是一个名为句子边界歧义消除的问题。它的Wikipedia page列出了一些库,但我不确定是否可以从C中轻松调用它们。

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

答案 1 :(得分:3)

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)中的最大熵建模重新实现上述算法,并且更加适应了背后看似更强大的社区。
  • Sentrick还有许多其他人也存在。有关更多信息,可能会使用较旧的列表here

模特和培训

现在,其中一些工具可以为您提供开箱即用的好结果,但有些可能没有。 OpenNLP包含一个开箱即用的English sentence detection模型,它可能适合您。如果您的域名与工具培训的域名明显不同,则可能效果不佳。例如,如果他们接受过报纸文本的培训,他们可能会非常擅长这项任务,但在信件上却很可怕。

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

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

答案 2 :(得分:2)

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

答案 3 :(得分:0)

一段时间后,我有同样的要求。我试过几个解决方案。其中最好的是分裂(http://code.google.com/p/splitta/)。它适用于我投入的所有边缘条件。 splitta的蟒蛇。

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

不幸的是,我没有我尝试过的所有选项的完整列表。