改行なしで PDF からテキストをコピーする効率的な方法はありますか?

改行なしで PDF からテキストをコピーする効率的な方法はありますか?

PDF から何千ものテキスト スニペットをスプレッドシートに取り込む必要があります。テキスト スニペットは短く、2 ~ 3 行を超えることはめったにありませんが、改行ごとに新しいセルが作成され、それを手動で修復する必要があり、時間がかかります。

数が多いため、「Word に貼り付けて検索と置換を行う」という回避策は、私にとっては時間の無駄です。コピー時に改行を消す方法はありますか? おそらく、このための特別なコピー モードを提供するビューアやプラグインがあるのでしょうか?

文書は科学論文です。テキストの配置はきわめて直線的です。コピーしているテキストはテーブルやフロート内になく、回転もされていないと想定できます。(そのようなことが起こった場合は、手動で対処すると思います)。テキストは 2 列に設定されていることがよくありますが、その列から必要なテキストだけをマークするのに問題はありません。特別な書式設定を保持する必要はありません。たとえば、印刷できない文字をすべて削除するソリューションを試してみます。テキストは英語ですが、ソリューションが ASCII でのみ機能し、コピーしたテキストから英数字以外の ASCII をすべて削除しても問題ありません。

私は Linux で動作するソリューション、おそらく何らかの Okular プラグインを強く希望しています。ただし、Windows 専用のソリューションがある場合は、それも知りたいです。私は Windows マシンで比較的新しい Acrobat Pro のライセンスを持っています。

答え1

以前、テキスト読み上げスクリプトを作成していたときに、同様の問題が発生しました。私のスクリプトは、改行を探してテキスト入力をチャンクに分割しようとします。PDF ファイルの場合、各行が改行で終わるため、混乱が生じます。

そこで私がやったことは、ピリオドで終わる改行のみを実際の改行と見なすコマンドをいくつか作成することでした。あまりきれいではありませんでしたが、うまくいきましsedた。tr

このスニペットを使用して、役立つと思われる小さなスクリプトを作成しました。

#!/bin/bash

# title: copy_without_linebreaks
# author: Glutanimate (github.com/glutanimate)
# license: MIT license

# Parses currently selected text and removes 
# newlines that aren't preceded by a full stop

SelectedText="$(xsel)"

ModifiedText="$(echo "$SelectedText" | \
    sed 's/\.$/.|/g' | sed 's/^\s*$/|/g' | tr '\n' ' ' | tr '|' '\n')"

#   - first sed command: replace end-of-line full stops with '|' delimiter and keep original periods.
#   - second sed command: replace empty lines with same delimiter (e.g.
#     to separate text headings from text)
#   - subsequent tr commands: remove existing newlines; replace delimiter with
#     newlines
# This is less than elegant but it works.

echo "$ModifiedText" | xsel -bi

スクリプトは を使用してxsel現在強調表示されているテキストを解析し、上記のsedおよびtrコマンドラインを使用してそれを変更します。処理されたテキストは を介し​​てクリップボードに返されますxsel -bi

シナリオでスクリプトを使用する方法は次のとおりです。

  1. (K)Ubuntuにxsel(がインストールされていることを確認してください)sudo apt-get install xsel
  2. スクリプトをcopy_without_linebreaksまたは同様の名前で保存し、実行可能にします。
  3. WMの設定でスクリプトを任意のホットキーに割り当てます
  4. テキストをハイライトしてホットキーを押します
  5. クリップボードには変更されたテキストが自動的に入力されます。

答え2

これは何年も私を悩ませてきたので、私は一般的な(Windows)解決策を見つけました。オートホットキーAutohotkey は、Windows 用の軽量で無料のオープンソース スクリプト ソフトウェアであり、考えられるほぼすべてのもののホットキーを作成できます。

Ctrl+を押すとc、アクティブ ウィンドウが PDF リーダーの場合にのみコードが実行され、それ以外の場合は通常どおりに指定された選択範囲がコピーされます。PDF リーダーの場合は、選択範囲がコピーされ、改行と二重スペースが削除され、結果がクリップボードに格納されます。何も選択されていない場合、クリップボードは実質的にそのまま残ります。

#IfWinActive ahk_class classFoxitReader
^c:: 
    old := ClipboardAll
    clipboard := ""
    send ^c
    clipwait 0.1
    if clipboard = 
        clipboard := old
    else {
        tmp := RegExReplace(clipboard, "(\S.*?)\R(.*?\S)", "$1 $2")
        clipboard := tmp
        StringReplace clipboard, clipboard, % "  ", % " ", A
        clipwait 0.1
        }
    old := ""
    tmp := ""
return

このコードを適用する前の唯一のタスクは、ウィンドウクラス名(ahk_class)のクラスを使います。私はすべてのケースで単一のPDFリーダー(ほとんどの人がそうしていると思います)を使用しています。FoxitReaderです。これはahk_classですclassFoxitReader。自分のソフトウェアのクラスは、WinGetClassコマンド(例AcrobatSDIWindow:Acrobat Reader の場合)。

ブラウザで PDF を読みたい場合は、これは解決策ではありません。または、#IfWinActive ahk_class classFoxitReaderコードが常に実行されるように行を削除することもできますが、この場合、結果からは常に改行と二重スペースが削除されます。

答え3

私にとってうまくいったもう 1 つの方法は、PDF ファイルを HTML として保存することでした。HTML 内の段落はそのまま残り、コピー & ペーストできます。txt や rtf などの他のファイル形式も機能します。これは Linux システムでも機能するはずです。

答え4

Windowsソリューションが示されていますここ「PDF Copy-Paster.exe」ファイルをダウンロードし、コピー&ペースト操作の前に実行する必要があります。試してみましたが、改行がすべて削除されることを除けば、問題なく動作します。そのため、複数の段落をコピーすると、後で 1 つだけになります。

そこには関連する質問SU で少し説明すれば、誰かにとって興味深いものになるかもしれません...

関連情報