Czy istnieje moduł Pythona do konwersji plików PDF na tekst? Wypróbowałem jeden fragment kodu znaleziony w Activestate, który używa pypdf, ale w wygenerowanym tekście nie było spacji i nie było pożytku.
385
Czy istnieje moduł Pythona do konwersji plików PDF na tekst? Wypróbowałem jeden fragment kodu znaleziony w Activestate, który używa pypdf, ale w wygenerowanym tekście nie było spacji i nie było pożytku.
Odpowiedzi:
Wypróbuj PDFMiner . Może wyodrębniać tekst z plików PDF w formacie HTML, SGML lub „Tagged PDF”.
Format Tagged PDF wydaje się być najczystszy, a usunięcie tagów XML pozostawia tylko czysty tekst.
Wersja Python 3 jest dostępna pod:
źródło
PDFMiner pakiet zmieniła się od codeape pisał.
EDYCJA (ponownie):
PDFMiner został ponownie zaktualizowany w wersji
20100213
Możesz sprawdzić zainstalowaną wersję za pomocą:
Oto zaktualizowana wersja (z komentarzami do tego, co zmieniłem / dodałem):
Edytuj (jeszcze raz):
Tutaj jest aktualizacja do najnowszej wersji w PyPI ,
20100619p1
. W skrócie WymieniłemLTTextItem
zLTChar
i przeszedł wystąpienie LAParams do konstruktora CsvConverter.EDYCJA (jeszcze raz):
Zaktualizowano do wersji
20110515
(dzięki Oeufcoque Penteano!):źródło
LTTextItem
sięLTChar
. unixuser.org/~euske/python/pdfminer/index.html#changes20110515
dla twojego komentarza.Ponieważ żadne z tych rozwiązań nie obsługuje najnowszej wersji PDFMiner, napisałem proste rozwiązanie, które zwróci tekst pdf za pomocą PDFMiner. Działa to dla tych, którzy mają błędy importowania
process_pdf
Zobacz poniżej kod, który działa dla Python 3:
źródło
python3
oprócz oczywistych nawiasów poprint
poleceniu, należy zastąpićfile
polecenieopen
i zaimportowaćStringIO
z pakietuio
Pdftotext Program typu open source (część Xpdf), który możesz wywołać z pythona (nie to, o co prosiłeś, ale może być przydatny). Użyłem go bez problemów. Myślę, że Google używa go w Google Desktop.
źródło
-layout
opcją utrzymania tekstu w tej samej pozycji, co w pliku PDF. Teraz gdybym tylko mógł wymyślić, jak umieścić w nim zawartość pliku PDF.pdftotext
wydaje się działać bardzo dobrze, ale potrzebuje drugiego argumentu, który jest łącznikiem, jeśli chcesz zobaczyć wyniki na standardowym wyjściu.find . -iname "*.pdf" -exec pdftotext -enc UTF-8 -eol unix -raw {} \;
Domyślnie wygenerowane pliki przyjmują oryginalną nazwę z.txt
rozszerzeniem.pyPDF działa dobrze (zakładając, że pracujesz z dobrze sformatowanymi plikami PDF). Jeśli wszystko, czego chcesz, to tekst (ze spacjami), możesz po prostu:
Możesz także łatwo uzyskać dostęp do metadanych, danych obrazu i tak dalej.
Komentarz w uwagach do kodu extractText:
To, czy jest to problem, zależy od tego, co robisz z tekstem (np. Jeśli kolejność nie ma znaczenia, jest w porządku, lub jeśli generator dodaje tekst do strumienia w kolejności, w jakiej będzie wyświetlany, jest w porządku) . Mam kod ekstrakcji pyPdf do codziennego użytku, bez żadnych problemów.
źródło
Możesz również dość łatwo użyć pdfminer jako biblioteki. Masz dostęp do modelu treści pdf i możesz stworzyć własną ekstrakcję tekstu. Zrobiłem to, aby przekonwertować zawartość pdf na tekst oddzielony średnikiem, używając poniższego kodu.
Funkcja po prostu sortuje obiekty treści TextItem według ich współrzędnych yi x, i wysyła elementy o tej samej współrzędnej y jak jedna linia tekstu, oddzielając obiekty w tej samej linii za pomocą „;” postacie.
Dzięki takiemu podejściu udało mi się wyodrębnić tekst z pliku pdf, z którego żadne inne narzędzie nie było w stanie wyodrębnić treści odpowiedniej do dalszej analizy. Inne narzędzia, które wypróbowałem, to pdftotext, ps2ascii i narzędzie online pdftextonline.com.
pdfminer to nieocenione narzędzie do skrobania pdf.
AKTUALIZACJA :
Powyższy kod jest napisany przeciwko starej wersji interfejsu API, zobacz mój komentarz poniżej.
źródło
pdfminer
nie jestpdflib
). Sugeruję zajrzeć do źródłapdf2txt.py
w źródle PDFminer, powyższy kod został zainspirowany starą wersją tego pliku.slate
to projekt, który bardzo ułatwia korzystanie z PDFMiner z biblioteki:źródło
Musiałem przekonwertować określony plik PDF na zwykły tekst w module Pythona. Użyłem PDFMiner 20110515, po przeczytaniu ich narzędzia pdf2txt.py napisałem ten prosty fragment:
źródło
C:\Python27\Scripts\pdfminer\tools\pdf2txt.py
Zmiana przeznaczenia kodu pdf2txt.py, który jest dołączony do pdfminer; możesz stworzyć funkcję, która podąży ścieżką do pliku pdf; opcjonalnie typ wyjściowy (txt | html | xml | tag) i wybiera polecenie takie jak linia poleceń pdf2txt {'-o': '/path/to/outfile.txt' ...}. Domyślnie możesz zadzwonić:
Zostanie utworzony plik tekstowy, rodzeństwo w systemie plików do oryginalnego pliku pdf.
źródło
PDFminer dał mi może jedną linię [strona 1 z 7 ...] na każdej stronie pliku pdf, z którym próbowałem.
Najlepsza odpowiedź, jaką do tej pory mam, to pdftoipe lub kod c ++ oparty na Xpdf.
zobacz moje pytanie, jak wygląda wyjście pdftoipe.
źródło
Dodatkowo istnieje PDFTextStream, który jest komercyjną biblioteką Java, z której można także korzystać w Pythonie.
źródło
Użyłem
pdftohtml
z-xml
argumentem, przeczytaj wynik za pomocąsubprocess.Popen()
, który da ci x koordyn, y koordyn, szerokość, wysokość i czcionkę każdego fragmentu tekstu w pdf. Myślę, że tego właśnie używa „evince”, ponieważ wyrzucają te same komunikaty o błędach.Jeśli potrzebujesz przetworzyć dane kolumnowe, staje się to nieco bardziej skomplikowane, ponieważ musisz wynaleźć algorytm, który pasuje do twojego pliku pdf. Problem polega na tym, że programy tworzące pliki PDF niekoniecznie układają tekst w jakimkolwiek logicznym formacie. Możesz wypróbować proste algorytmy sortowania i to działa czasami, ale mogą być małe „marudery” i „błąki”, fragmenty tekstu, które nie są ułożone w kolejności, w jakiej się spodziewałeś. Musisz więc być kreatywny.
Zajęło mi około 5 godzin, aby znaleźć jeden dla pdf, nad którym pracowałem. Ale teraz działa całkiem dobrze. Powodzenia.
źródło
Znalazłem to rozwiązanie dzisiaj. Działa świetnie dla mnie. Nawet renderowanie stron PDF na obrazy PNG. http://www.swftools.org/gfx_tutorial.html
źródło