使用NLP进行句子检测

时间:2011-12-12 08:13:31

标签: java nlp opennlp text-segmentation

我试图从大量文本中解析句子。使用java我开始使用NLN工具,如OpenNLP和Stanford的Parser。

但这是我被卡住的地方。虽然这两种解析器都非常棒,但它们在非统一文本方面却失败了。

例如在我的文本中,大多数句子都是以句点分隔的,但在某些情况下,例如子弹点则不是。这两个解析都失败了。

我甚至尝试在stanford解析中为多个句子终结符设置选项,但输出效果不是很好!

任何想法??

编辑:为了简单起见,我希望解析文本,其中分隔符是新行(“\ n”)或句点(“。”)...

5 个答案:

答案 0 :(得分:6)

首先,您必须明确定义任务。究竟,你对“一句话”的定义是什么?在你有这样一个定义之前,你只会在圈子里徘徊。

其次,清理脏文本通常是与“句子分裂”完全不同的任务。各种NLP句子块正在假设相对干净的输入文本。从HTML,或提取的powerpoint或其他噪声到文本是另一个问题。

第三,斯坦福和其他大口径设备是统计的。因此,它们保证具有非零错误率。您的数据越接近他们所训练的内容,错误率就越高。

答案 1 :(得分:3)

编写自定义句子拆分器。你可以使用斯坦福分裂器之类的东西作为第一遍,然后编写一个基于规则的后处理器来纠正错误。

我为我正在解析的生物医学文本做了类似的事情。我使用了GENIA分离器,然后在事后修复了东西。

编辑:如果您正在接受输入HTML,那么您应该首先对其进行预处理,例如处理项目符号列表和内容。然后应用你的分离器。

答案 2 :(得分:1)

还有一个用于自然语言处理的优秀工具包 - GATE。它有多个句子分割器,包括标准的ANNIE句子分割器(不适合你完全需要)和RegEx sentence splitter。稍后用于任何棘手的拆分。

出于您目的的精确管道是:

  1. 文档重置PR。
  2. ANNIE English Tokenizer。
  3. ANNIE RegEx Sentence Splitter。
  4. 此外,您可以使用GATE的JAPE rules进行更灵活的模式搜索。 (有关完整的GATE文档,请参阅Tao。)

答案 3 :(得分:1)

如果您想坚持使用Stanford NLP或OpenNLP,那么您最好重新训练模型。这些软件包中的几乎所有工具都是基于机器学习的。只有定制的培训数据,它们才能为您提供理想的模型和性能。

以下是我的建议:根据您的标准手动分割句子。我想几千个句子就足够了。然后调用API或命令行来重新训练句子分割器。那你就完了!

但首先,你需要弄清楚的一点是,正如之前的主题所说:“首先你必须明确定义任务。究竟,你对'一个句子的定义是什么?'

我在我的项目Dishes Map中使用Stanford NLP和OpenNLP,这是一种基于NLP和机器学习的美味菜肴发现引擎。他们工作得很好!

答案 4 :(得分:0)

对于类似的情况,我所做的是根据我希望文本分割的位置将文本分成不同的句子(用新行分隔)。在您的情况下,它是以项目符号开头的文本(或完全是带有“换行标记”的文本)。这也将解决类似的问题,如果您正在使用相同的HTML。 在将它们分成不同的行之后,您可以发送用于句子检测的各行,这将更加正确。