0

テキストを取得して文を分割しています-各項目に完全な文を含む配列を作成しています。これを行う最善の方法は、BreakIterator クラスを使用することであると判断しました。私が使用しているコードは次のとおりです。

theSentences = new ArrayList<String>();
String myText = aString; //the text is produced through a text box
BreakIterator boundary = BreakIterator.getSentenceInstance();
boundary.setText(myText);
int start = boundary.first();
for (int end = boundary.next();
         end != BreakIterator.DONE;
         start = end, end = boundary.next())
{
    String temp = myText.substring(start,end);
    theSentences.add(temp.trim());
}

これは、ユーザーが文末にスペースを含めることを覚えている場合 (ほとんどの人がそうしています) には、まったく問題なく機能します。ただし、入力時に間違いを犯す人もいます。ピリオドの後にスペースを入れないと、コードは文の終わりに達したことを認識しないようです。これについて何ができますか?

代わりに正規表現を使用できることはわかっていますが、BreakIterator が作成されたものであるため、BreakIterator を使用するのが最善のようです。また、ピリオドの他のすべての可能な使用法とピリオドを区別する正規表現を書くと、頭が痛くなります:-)

4

1 に答える 1

0

非常に少ない。文の分割は、100% 達成できるタスクではありません。私自身、Stanford CoreNLPと、パイプラインの一部である ssplit アノテーターを使用して文を分割しています。単純なタスクの場合、これはおそらくダウンロードしたくない巨大な jar ファイルですが、これがいかに複雑なタスクであるかを示しています。

文の分割を軽量に実装するには、ルールベースの正規表現メソッドを実装するのが最善です。

于 2014-01-30T19:43:12.243 に答える