4

私は本の断片である文字列を持っています(その約1章)この文字列はすべて1行です。各文の最後に改行を入れたい

私はそれほど洗練されていないコードでそれを解決しました

text = text.replaceAll("\\.","\\.\n"); //same for ? same for !

もちろん、これではあまり良い結果は得られません。私はこれが完璧である必要はありませんが、私がそれをより良くすることができるほど良いです。

改行文字を作成する前に、少なくとも次のことを確認したいと思います。

the word before the . is longer then 2 characters
there are no dots before the . in the same "word"
the character before the . is not a number
the character after the dot (and possibly a whitespace after that dot) is not a (

それを実現する実際のコードとともに、他の提案は本当にありがたいです。

同様の質問: ここ

アップデート:

私の本には直接引用や直接スピーチがあまり含まれていないため、優先順位のリストの上位にはありませんが、それらの中にある文を処理するルールも、同じ引用からの文が新しい行に終わらないようにするためのものです。

4

3 に答える 3

3

スタンフォードのCoreNLPツールキットには、文のセグメンテーションを行うクラスがあります。詳しくはこちらをご覧ください

new DocumentPreprocessor(new StringReader(s)).iterator()テキストを含む文字列がどこにあるかを言うとs、文のイテレータが返されます。

これにより、文もトークン化されることに注意してください。文を最初のように見せたい場合は、この出力を分割のガイドとして使用するか、PTBTokenizer -untokコマンド(上記と同じリンクを参照)を実行して、トークン化された各文を再び正常に見せることができます。

ルールは重要なケースの多くを考慮していないため、これはルールのリストよりもほぼ確実にうまく機能します。

于 2012-05-17T17:06:34.767 に答える
1

私があなたの要件を正しく理解した場合は、次のようなことを試してください。

text = text.replaceAll("[^\\.]{1,}\\D\\.\\s?[^\\(]","\\.\n");
于 2012-05-17T16:17:07.690 に答える
0
String newline = System.getProperty("line.separator");
String yourLine = yourLine.append(newline);
于 2012-05-17T16:07:24.987 に答える