Membersihkan masalah font pdftotext

3

Saya menggunakan pdftotextuntuk membuat versi ASCII dari dokumen PDF (dibuat dengan LaTeX), karena kolaborator lebih suka dokumen sederhana dalam MS Word.

Versi teks biasa yang saya lihat terlihat bagus, tetapi setelah diperiksa lebih dekat karakter f tampaknya sering salah dikonversi tergantung pada karakter apa yang mengikuti. Sebagai contoh, fi dan fl sering tampak menjadi satu karakter khusus, yang akan saya coba tempel di sini: fi dan fl.

Apa cara terbaik untuk membersihkan output pdftotext? Saya berpikir sedmungkin alat yang tepat, tetapi saya tidak yakin bagaimana mendeteksi karakter khusus ini.

karel
sumber
fl, fi, ff, ffl, dan ffi adalah pengikat tipografi yang umum, biasanya digantikan oleh satu karakter (dan tentunya dengan TeX): en.wikipedia.org/wiki/Typographic_ligature#Computer_typesetting - mungkin Anda hanya perlu memeriksa font yang Anda gunakan Sedang melihat keluaran memilikinya, dan bahwa pengodeannya benar.
frabjous
oh, dan maksudmu pdftotextdari poppler, kan pdftotex?
frabjous
Apakah Anda memiliki sumber TeX asli? Mengapa tidak menggunakan, misalnya, latex2rtf atau oolatex (dari TeX4ht) untuk menghasilkan file Word Processor untuk pecandu Word? Mengompilasi ke PDF dan kemudian mengonversi ke teks biasa tampak seperti rute yang sangat aneh untuk konversi.
frabjous
Oh, dan jika Anda ingin mengkonversi PDF ke teks biasa, pertimbangkan untuk menggunakan ebook-convertdari kaliber ( calibre-ebook.com ) daripada pdftotext. Ini memungkinkan output teks biasa (dan berbagai format lainnya), dan menangani ligatur untuk Anda.
frabjous
Maksud saya pdftotex t . Tetap salah ketik. Saya memiliki sumber TeX asli, tetapi latex2rtf dan oolatex tidak berfungsi sebaik pdftotext. Saya menggunakan paket-paket tambahan seperti siunitxdan glossaries, dan karena itu sepertinya mengirim melalui PDF adalah solusi terbaik. Saya berharap ada cara yang lebih baik.

Jawaban:

3

Secara default, pdftotextmenampilkan data unicode (UTF-8). Jika terminal atau editor teks Anda tidak mendukung UTF-8, ligatur seperti "fi" dan "fl" (yang dapat direpresentasikan sebagai karakter tunggal dalam unicode) akan tampak aneh, seperti yang Anda perhatikan.

Perbaikan sederhana adalah dengan memberitahu pdftotextkeluaran ASCII bukan unicode:

pdftotext -enc ASCII7 input.pdf output.txt

Ini akan menghasilkan output ASCII yang bersih, menghilangkan kebutuhan Anda untuk membersihkannya secara manual sesudahnya.

davidg
sumber
Terima kasih. Saya menemukan ebook-convertsaran di atas sebagai yang terbaik. Saran Anda mungkin meningkatkan perilaku default pdfottext, tetapi saya pikir terminal saya mendukung UTF-8, dan ebook-converttampaknya menangani superskrip dan hal-hal lain dengan lebih baik.
solusi ini juga tidak akan berfungsi jika Anda benar-benar membutuhkan karakter unicode di output Anda.
amenthes
1

Dengan asumsi Anda menggunakan beberapa jenis sistem berbasis Unix, Anda dapat menjalankan ini pada output dari pdftotext:

sed -i -e 's/ffi/ffi/g' -e 's/fi/fi/g' -e 's/ff/ff/g' -e 's/fl/fl/g' -e 's/ffl/ffl/g' output.txt

Itu harus mengganti ligatur dengan masing-masing huruf yang mereka masuki. (Lihat komentar saya di atas untuk apa hubungan ligatur dengan ini.)

Saya mengujinya pada file teks yang dihasilkan pdftotextdari PDF yang dihasilkan LaTeX. Dan itu bekerja dengan baik. Tetapi jika LaTeX menggunakan pengkodean atau font yang tidak standar dengan ligatur tambahan mungkin ada lebih banyak yang harus dilakukan.

Anda mungkin ingin memastikan font yang Anda gunakan di terminal Anda memiliki karakter untuk ligatures f-series. DejaVu Sans Mono adalah pilihan yang baik.

luar biasa
sumber
Dalam kasus terminal Anda tidak utf-8 (misalnya jendela cmd.exe), Anda juga dapat melakukan ini dengan representasi byte: sed -e 's/\\xEF\\xAC\\x80/ff/g' -e 's/\\xEF\\xAC\\x81/fi/g' -e 's/\\xEF\\xAC\\x82/fl/g' -e 's/\\xEF\\xAC\\x83/ffi/g' -e 's/\\xEF\\xAC\\x84/ffl/g' -e 's/\\xEF\\xAC\\x85/ft/g' -e 's/\\xEF\\xAC\\x86/st/g'.
amenthes