我想知道这里是否有人熟悉C或C++的NLP库,可以帮助我完成这个任务或提供任何建议?
感谢您的帮助。
句子边界消歧(SBD)是自然语言处理领域中的一个核心问题。不幸的是,我以前发现和使用的工具都不是用C编写的(因为它不是字符串操作的首选语言,除非速度是主要问题)。
流水线
如果可能的话,我会创建一个简单的流水线 - 如果在Unix系统上,这应该不是问题,但即使你在Windows上使用脚本语言,你也应该能够填补空白。这意味着SBD可以成为最适合工作的工具,而不仅仅是你能找到的Z语言唯一的SBD。例如,
./pdfconvert | SBD | my_C_tool > ...
模型和训练
现在,一些工具可能会直接给你良好的结果,但有些则不行。OpenNLP自带英文句子检测模型,这可能适用于您。然而,如果您的领域与工具训练的领域显著不同,则它们可能表现不佳。例如,如果它们是在报纸文本上进行训练的,那么它们在这个任务上可能非常出色,但在处理信件时可能很糟糕。
因此,您可能需要通过提供示例来训练SBD工具。每个工具都应该记录此过程,但我要警告您,这可能需要一些工作量。它需要您在文档X上运行工具,逐个检查并手动修正任何错误的分割,并将正确分割的文档X返回给工具进行训练。根据文档的大小和所涉及的工具,您可能需要对一个或一百个文档执行此操作,直到获得合理的结果。
祝您好运,如果您有任何问题,请随时提问。
这是一个自然语言分析问题,而不是计算机语言的问题。因此,永远不会有简单的答案。但是,如果我们知道您为什么要将PDF拆分成句子以及您在获取这些句子后想要做什么,可能会有一些启发式方法可以应用并推荐给您。
我之前有同样的需求。我尝试了几种解决方案,其中最好的是splitta (http://code.google.com/p/splitta/)。它在我测试的所有边缘情况下都表现良好,使用Python编写。
我还尝试了sentrick (Java)。http://www.denkselbst.de/sentrick/index.html
不幸的是,我没有尝试过的所有选项的完整列表。