查找句子边界的Java库

时间:2009-01-27 13:13:29

标签: java string nlp text-segmentation

有没有人知道处理查找句子边界的Java库?我认为它将是一个智能的StringTokenizer实现,它知道语言可以使用的所有句子终止符。

以下是我使用BreakIterator的经历:

使用示例here: 我有以下日语:

今日はパソコンを買った。高性能のマックは早い!とても快適です。

在ascii中,它看起来像这样:

\ufeff\u4eca\u65e5\u306f\u30d1\u30bd\u30b3\u30f3\u3092\u8cb7\u3063\u305f\u3002\u9ad8\u6027\u80fd\u306e\u30de\u30c3\u30af\u306f\u65e9\u3044\uff01\u3068\u3066\u3082\u5feb\u9069\u3067\u3059\u3002

以下是我更改的示例部分:   static void sentenceExamples(){

  Locale currentLocale = new Locale ("ja","JP");
  BreakIterator sentenceIterator = 
     BreakIterator.getSentenceInstance(currentLocale);
  String someText = "今日はパソコンを買った。高性能のマックは早い!とても快適です。";

当我查看边界指数时,我看到了这一点:

0|13|24|32

但这些指数与任何句子终止符不对应。

2 个答案:

答案 0 :(得分:4)

您想要查看国际化的BreakIterator类。 sentence boundaries的一个很好的起点。

答案 1 :(得分:3)

您写道:

  

我认为它是一个智能的StringTokenizer实现,它知道语言可以使用的所有句子终止符。

这里的一个基本问题是句子终止符取决于上下文,请考虑:

  

琼斯博士如何计算5!没有递归?

这应该被认为是一个单句,但如果你只是分开可能的句子终止符,你将得到三个句子。

因此,这是一个比人们在开始时想到的更复杂的问题。可以使用机器学习技术来处理它。例如,您可以查看OpenNLP项目,尤其是SentenceDetectorME类。