7

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

这是我使用 BreakIterator 的经验:

在这里使用示例:我有以下日语:

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

在 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

但是这些索引不对应于任何句子终止符。

4

2 回答 2

4

您想查看国际化的 BreakIterator 类。句子边界的一个很好的起点。

于 2009-01-27T13:16:18.327 回答
3

你写了:

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

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

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

这应该被识别为一个句子,但是如果您只是拆分可能的句子终止符,您将得到三个句子。

所以这是一个比人们一开始想象的更复杂的问题。可以使用机器学习技术来处理它。例如,您可以查看OpenNLP项目,特别是SentenceDetectorME类。

于 2009-01-27T16:13:23.137 回答