2

Kindleで本をきちんと読みたいです。

夢を実現するには、txtファイルの破線を修正するスクリプトが必要です。

たとえば、txtファイルに次の行がある場合:

He watched Kahlan as she walked with her shoulders slumped
down.

...次に、「down」という単語の前の改行を削除して修正する必要があります。

He watched Kahlan as she walked with her shoulders slumped down.

それで、仲間のプログラマー、(a)これを行う最も簡単な方法と(b)最高の言語は何ですか?

ps解決策には、列1で小文字を検索し、行をつなぎ合わせる前に改行を削除することが含まれます。私が修正しようとしている小説には、この「不正な改行」が120万回発生しています。

4

7 に答える 7

2

それを行う方法はたくさんあります。Perl、Python、またはRubyに沿ったものをお勧めします。あなたが素早く汚いワンライナーでこれをすることを探しているなら、Perlはその部門で優位に立っています。

たとえば、これはあなたが求めたことを実行します:

# Slurp entire file.
# Convert newlines followed by lower-case letter.
perl -p -e 'BEGIN {$/ = undef}    s/\n(?=[a-z])/ /g' book.txt

しかし、段落が2つの改行で区切られている場合、これはおそらくより良いでしょう。

# Process file a "paragraph" at a time.
# Convert newlines followed by at least 2 characters.
perl -p -e 'BEGIN {$/ = qq{\n\n}} s/\n(?=..)/ /g'    book.txt
于 2010-06-09T15:38:33.083 に答える
1

段落の間にスペースがある場合:段落ごとにテキストを読み取り(set $/ = "\n\n"')、CPANのText::Autoformatを使用します。

例(DATAの代わりに通常のファイルハンドルを使用します-例では便宜上使用しただけです):

use strict;
use warnings;
use Text::Autoformat;

local $/ = "\n\n";
while (<DATA>) {
    print autoformat $_, {left=>1, right=>80};
}


__DATA__
He watched Kahlan as she walked with her shoulders slumped 
down. 

He watched Kahlan as she walked with her shoulders slumped 
down. 
He watched Kahlan as she walked with her shoulders slumped 
down. 
He watched Kahlan as she walked with her shoulders slumped 
down. 

He watched Kahlan as she walked with her shoulders slumped 
down. 
He watched Kahlan as she walked with her shoulders slumped 
down. 

出力:

He watched Kahlan as she walked with her shoulders slumped down.

He watched Kahlan as she walked with her shoulders slumped down. He watched
Kahlan as she walked with her shoulders slumped down. He watched Kahlan as she
walked with her shoulders slumped down.

He watched Kahlan as she walked with her shoulders slumped down. He watched
Kahlan as she walked with her shoulders slumped down.
于 2010-06-09T18:43:13.093 に答える
0

段落間に改行がある場合は、「テキストをアンラップする」オプションがある優れたテキストエディタで開くことができる場合があります。その1つがMac用のTextMateですが、おそらくWindows用のオプションもあります。

于 2010-06-09T15:21:11.577 に答える
0

正規表現を使用して、直前に改行がある小文字を照合し、その改行をスペースに置き換えると、うまくいくはずです。

これがC#の実装です。

    string UnwrapText(string input)
    {
        return Regex.Replace(input, Environment.NewLine + "[a-z]",
                            delegate(Match m)
                            {
                                return m.ToString().Replace(Environment.NewLine, " ");
                            });
    }
于 2010-06-09T15:47:13.810 に答える
0

私は本を​​解析して、改行文字の出現を探すと言います。しばらく経っても届かない場合は、取り外してください。唯一の問題は、この特定のケースでは機能しないことです。

彼は、カーランが肩を下ろして歩いているのを見ました。\ n

彼はカーランが肩を下ろして歩いているのを見た。

それ以外の:

彼はカーランが肩を下ろして歩いているのを見た。彼はカーランが肩を下ろして歩いているのを見た。

その場合、段落をどのように区切るかを決定する必要があります(2つの改行文字ですか?)。その場合は、ピリオドの後に2つの改行文字があるかどうかを確認してください。そうでない場合は、最初の改行文字を削除します。

于 2010-06-09T15:27:12.780 に答える
0

段落がタブで始まる場合、最も効率的な方法は、タブの前にないすべての改行を削除し、それらをスペースに置き換えることです。

そうでない場合は、2つ以上の改行のシーケンスに含まれていないすべての改行を削除できます。

ピリオドの後にないすべての改行を削除することもできますが、前述のように、文が段落ではなく行を終了する場合、これは失敗します。

于 2010-06-09T16:24:44.453 に答える
0

vim、、、を使用してファイルを開き:set tw=0 noaiますgggqG。ファイルが適切に動作している場合は、段落の区切りを保持しながら、段落内のすべての改行を削除する必要があります。

于 2010-06-09T20:17:30.993 に答える