3

私のシステムは文字列メッセージを受け取ります。差出人は私の受信前にワードラップを適用します. 送信システムのワード ラッピング アルゴリズムの 1 行あたりの最大文字数がわかっていると仮定すると、意味のある (ユーザーが挿入した) 改行を維持しながら、テキストを正しくアンラップできますか?

たとえば、ここにいくつかのテキストがあります。この例では*、ユーザーが挿入した意味のある改行を a で¬示し、ワード ラッピング アルゴリズム (システム) で挿入された改行を a で示します。

入力

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed in elit¬
vitae rutrum. Mauris in fringilla nulla, id rutrum augue.*
Sed non venenatis diam. Nam porta diam eget ante tincidunt ornare. Nulla¬
iaculis auctor. Pellentesque nec diam id quam gravida sollicitudin. Donec¬
dictum libero vitae.*
*
Venenatis eleifend vestibulum ante ipsum primis in faucibus orci luctus et*
*
Ultrices posuere cubilia Curae; Quisque vitae tempus odio.

最終的に私がやりたいことは、ユーザーが挿入した意味のある改行を維持しながら、テキストを「ラップ解除」することです。

期待される出力

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed in elit vitae rutrum. Mauris in fringilla nulla, id rutrum augue.*
Sed non venenatis diam. Nam porta diam eget ante tincidunt ornare. Nulla iaculis auctor. Pellentesque nec diam id quam gravida sollicitudin. Donec dictum libero vitae.*
*
Venenatis eleifend vestibulum ante ipsum primis in faucibus orci luctus et*
*
Ultrices posuere cubilia Curae; Quisque vitae tempus odio.

ご覧のとおり、アンラップ アルゴリズムは、最初に各改行を意味のあるものとして分類するか、システムが挿入されたものとして分類します。現在の行の文字数と次の行の最初の単語の文字数を調べることで、かなり近づくことができます。Venenatisただし、システムが挿入されたとして始まる文の改行を分類するため、これは完全ではありません。

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed in elit vitae rutrum. Mauris in fringilla nulla, id rutrum augue.*
Sed non venenatis diam. Nam porta diam eget ante tincidunt ornare. Nulla iaculis auctor. Pellentesque nec diam id quam gravida sollicitudin. Donec dictum libero vitae.*
*
Venenatis eleifend vestibulum ante ipsum primis in faucibus orci luctus et*
Ultrices posuere cubilia Curae; Quisque vitae tempus odio.

洞察をありがとう、ピート

4

3 に答える 3

2

ワードラップとハードリターンの改行が同じようにエンコードされている場合、一般的な問題を確実に解決できるとは思いません。近似を行うことができます:

  • ワードラップが強制される前に発生する改行 (つまり、次の単語が行に収まる) は、間違いなくハード ブレークです。(これには、空白行をハード ブレークとしてカウントすることも含まれます。)
  • それ以外の場合、行が段落ターミネータのように見えるもので終わっている場合は、ハード ブレークである可能性が高くなります。

2 番目の条件のトリッキーな部分は、「appears to be a paragraph terminator」という述語を計算することです。最小要件は、文末の句読点シーケンス ("."、"!"、".)" など) で終わることです。追加の要件として、候補のハード ブレークが句読点のバランスの取れたペア (括弧、対になった引用符など) を分割しないことが必要な場合があります。(少なくとも英語で言えば、必然的に次のような順序になります:

オープンクォート、テキスト、センテンスターミネータ、オープンクォート、テキスト

ほぼ確実にハードブレークです。)

これは明らかに言語固有のものです。また、テキスト自体にタイプミス (不均衡な引用など) がないことも前提としています。

それでも、多くの誤検知が発生する可能性があります。しかし、それを改善する簡単な方法は見当たりません。

于 2013-08-06T03:50:20.093 に答える
0

本をOCRすることのフォローアップとして、私はこのようなことをしました。意図的な改行を暗示する短い行を特定するのは非常に簡単でした。トリッキーな部分は、段落の最後の行が意図的な改行の前の余白まで走っているケースを見つけることでした. 最終的に、次の行が新しい段落の始まりである可能性が高い時期を特定するのに役立つヒューリスティックが得られました。小説では、これには引用符や大文字で始まるようなものが含まれていました. 完璧ではなかったので、読んでエラーを修正する必要がありました。最初の数パスは、問題を見つけてルールを改良するまで、それほど遠くはありませんでした。長期的には時間を節約できましたが、自動化にはほど遠いものでした.

于 2013-08-06T04:08:41.707 に答える