ハイフネーションを削除します


15

新しい挑戦の時間です!さまざまなドキュメント形式間でコピーアンドペーストするときの一般的な問題:ハイフネーション 左揃えのレイアウトの不揃いや、正当なレイアウトの均等な間隔を減らしますが、PDFが適切に構築されず、レイアウト内にハイフンが保持されると、コピーしたテキストの編集やリフローが難しくなります。

幸いなことに、数え切れないほどのセルフヘルプの本を信じるなら、それを挑戦と見なしても何も問題はありません。これらの自助の本は例外なくPPCGに言及していると思います。PPCGでは、課題として提示された場合に問題が解決されます。あなたの仕事は、テキストから問題のあるハイフネーションと改行を削除して、テキストエディタに貼り付ける準備ができるようにすることです。

問題の説明

必要に応じて、ハイフネーションと改行を削除するプログラムまたは関数を作成します。入力は、上で文字列になりますstdin(または最も近い代替)または関数の入力として。出力(上stdoutまたは一番近い代替または関数の出力)は、テキストを「修正」されます。このテキストは、直接コピーアンドペーストできる必要があります。つまり、先頭または末尾の出力は問題ありませんが、修正されたテキストの途中の追加出力(たとえば、各行の先頭のスペース)はそうではありません

最も基本的なケースは次のとおりです(注:末尾のスペースはありません)

Lorem ipsum dolor sit amet, con-
sectetur adipiscing elit. Morbi
lacinia nisi sed mauris rhoncus.

問題のハイフンと改行は、取得するために削除する必要があります

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi lacinia nisi sed mauris rhoncus.

ただし、いくつかの例外があります。

  • 二重改行は段落区切りを示し、保持する必要があります。
  • 適切な名詞と名前は、既にハイフンが含まれている場合を除き、2行に分かれることはありません(例:Navier-Stokes方程式)。改行を削除する必要がありますが、ハイフンは保持されます。これらのケースは、最初の文字のみを大文字にすることで識別できます。
  • 場合によっては、ハイフンは単語グループを示します(たとえば、19世紀および20世紀)。これが2行にわたって発生する場合、次の行の先頭スペースで示されます。

例:(この例で表現されている見解は架空のものであり、必ずしも著者の見解を表しているわけではありません。ルンゲクッタフェルバーグ法の反対者もこの課題に参加することを歓迎します)

Differential equations can
be solved with the Runge-Kutta-
Fehlberg method.

Developed in the nineteenth-
 or twentieth century, this
method is completely FANTAS-
TIC.

となります

Differential equations can be solved with the Runge-Kutta-Fehlberg method. 

Developed in the nineteenth- or twentieth century, this method is completely FANTASTIC. 

改行は、好みに応じてASCIIコードポイント\nまたは\r\nASCIIコードポイントのいずれかであり、ハイフンは単純なASCII -(マイナス記号)です。UTF-8サポートは必要ありません。この課題はであるため、最短のコードが優先されます。

回答:


9

網膜、58バイト

(?<!\n)\n(?!\n)
<space>
- (?! |[A-Z][a-z])| (?= )|(?<=-) (?=[A-Z])
<empty>

<space>独自の行の単一のスペースを<empty>表し、空の末尾の行を表します。カウントの目的で、各行は個別のファイルに入り、\n実際の改行文字に置き換えられます。便宜上、上記のすべてを単一のファイルに入れて、-sフラグを付けて実行できます。

これを行うにはもっと短い方法があると確信しているので、ゴルフが終わるまで説明を待ちます。


私は実際にRetinaでこれに取り組むことを望んでいましたが、Monoを台無しにしたくありませんでした。(
orlp

2

GNU Sed、68

-zr渡されるオプションのスコアには+2が含まれますsed

s/\n\n/:/g
s/-\n([A-Z][a-z])/-\1/g
s/-\n /- /g
s/-\n//g
y/\n:/ \n/

入力ストリームに:文字が含まれていないと仮定します。これが受け入れられない場合:、コード内の「」はすべて、0x7 BELなどの他の印刷不可能なASCII文字にすべて置き換えられます。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.