【发布时间】:2013-06-14 02:45:24
【问题描述】:
我在 Java 中使用 BreakIterator 类将段落分成句子。这是我的代码:
public Map<String, Double> breakSentence(String document) {
sentences = new HashMap<String, Double>();
BreakIterator bi = BreakIterator.getSentenceInstance(Locale.US);
bi.setText(document);
Double tfIdf = 0.0;
int start = bi.first();
for(int end = bi.next(); end != BreakIterator.DONE; start = end, end = bi.next()) {
String sentence = document.substring(start, end);
sentences.put(sentence, tfIdf);
}
return sentences;
}
问题是当段落包含标题或数字时,例如:
“罗伯茨教授试图通过编写 1200 行代码来解决问题。”
我的代码将产生的是:
sentences :
Prof
Roberts trying to solve a problem by writing a 1
200 lines of code
由于标题和数字中的句点,而不是 1 个句子。
有没有办法解决这个问题以使用 Java 处理标题和数字?
【问题讨论】:
-
我很困惑...文档中的这一行表明应该是一种方法:“句子边界分析允许选择正确解释数字和缩写中的句点,以及引号和括号等尾随标点符号......“也就是说,我从未使用过
BreakIterator。 -
1.200 对我来说没有被拆分,尽管 Prof. 确实被拆分了。
-
您可能希望为此创建自己的方法。并为教授设置例外。 “先生。” “太太。”或您在输入中可能遇到的任何其他变体。
-
@user93353 - 如果下一个单词不以大写字母开头,
Prof将不会被拆分... -
@leigero 你能给我一个关于设置处理它的方法的说明吗?正则表达式会解决这个问题吗?