PDF'den metin nasıl çıkarılır? [kapalı]


152

PDF'den metin ve resim çıkarmak için bir kütüphane / API önerebilir misiniz? Belgenin önceden bilinen bölgelerinde bulunan metne ulaşabilmemiz gerekir, bu nedenle API'nin bize sayfadaki her öğenin konum bilgilerini vermesi gerekir.

Bu verilerin çıktısının xmlveya jsonbiçiminin alınmasını istiyoruz. Şu anda oldukça iyi görünen PdfTextStream'e bakıyoruz , ancak diğer insanların deneyimlerini ve önerilerini duymak istiyoruz.

Bir pdf'den programlı olarak metin ayıklamak için alternatifler (ticari veya ücretsiz) var mı?



1
(Hayır pozisyon bilgisi) gerçekten basit bir şey ihtiyacı olanlar için, bu perl regex yeterli olabilir: /^\s*\[?\((.*?)\)\]?\s*T[Jj]/mg. Sadece PDF'deki tüm normal metni gösteren Tj / TJ operatörünü arar.
Alex R

1
Android'de iyi çalışan TomRoush PdfBox kütüphanesini kullanın
FaisalAhmed

Yanıtlar:


113

İçe aktarmak zorunda olduğum bir veri tablosu ile 400 sayfalık bir pdf dosyası verildi - neyse ki hiçbir görüntü. Ghostscript benim için çalıştı:

gswin64c -sDEVICE=txtwrite -o output.txt input.pdf

Çıktı dosyası, başlıklar, vb. İçeren sayfalara ayrıldı, ancak daha sonra boş satırları vb. -dSIMPLEve -dCOMPLEXbu durumda hiçbir fark yaratmadı.


37
Linux ve cygwin'de komut gsyerine gswin64c. Mükemmel çalışıyor. Patentli ücretli saçmalık yok. Sadece çalışıyor.
Jannes

4
Evet, harika çalışıyor! Şimdi pdf dosyalarımda dokunulmazlık ile "grep" kullanabilirsiniz. Okuduğumdan daha iyi grep yapabileceğim için, bu bir kazanç! (:-) Olumlu oy.
David Elson

1
Bu ile tek sorun gömülü 'eski' yazı tipleri ile pdfs üzerinde kullanmak oldu. Yerel olarak üretilen pdf'ler için mükemmel çalışır, ancak belirsiz kaynaklarla daha zordur. Aksi takdirde, mükemmel bir senaryo.
Jon M

ne gelmez -sDEVICE=txtwritemi? Ghostscript Nasıl Kullanılır
Ooker

Metin dosyası olarak kaydetmek yerine stdout çıktısı için kullanın gswin64c -sDEVICE=txtwrite -o- input.pdf. Kaynak (benim tarafımdan biraz değiştirildi): gist.github.com/drmohundro/560d72ed06baaf16f191ee8be34526ac
LuH

33

Bugünden beri biliyorum: PDF'lerden metin çıkarma için en iyi şey metin çıkarma araç takımı olan TET . TET, PDFlib.com ürün ailesinin bir parçasıdır.

PDFlib.com bir Thomas Merz şirketidir. Adını tanımıyorsanız: Thomas Merz, "PostScript ve PDF İncil" in yazarıdır.

TET'in ilk enkarnasyonu bir kütüphane . Muhtemelen Budda006'nın istediği her şeyi yapabilir, sayfadaki her öğe hakkında konum bilgisi dahil. Oh, ve ayrıca görüntüleri de çıkarabilir. Parçalara ayrılmış görüntüleri yeniden birleştirir.

pdflib.com ayrıca bu teknolojinin bir başka enkarnasyonu olan Acrobat için TET eklentisini de sunuyor . Üçüncü enkarnasyon da PDFlib TET iFilter . Bu, kullanıcı masaüstü bilgisayarları için bağımsız bir araçtır. Her ikisi de özel, ticari olmayan amaçlar için (biradaki gibi) ücretsizdir.

Ve gerçekten güçlü. Adobe'nin kendi metin ayıklamasından çok daha iyi. Diğer araçların (Adobe'ler dahil) yalnızca çöp tükettiği metinleri benim için çıkardı.

Masaüstü bağımsız aracını yeni test ettim ve web sayfalarında söyledikleri doğru. Çok iyi bir komut satırı var. Bazı "sorunlu" PDF test dosyaları aracı benim tam memnuniyetini ele.

Bu şey artık her karmaşık ve zorlu PDF metin çıkarma gereksinimi için tavsiyem olacak.

TET sadece harika. Tabloları algılar. Tabloların içinde, birden çok sütuna yayılan hücreleri tanımlar. Her tablo hücresinin tablo satırlarını ve içeriklerini ayrı ayrı tanımlar. Tireleme ile çok iyi ilgilenir: tireleri kaldırır ve tam kelimeleri geri yükler. ASCII dışı dilleri destekler (CJK, Arapça ve İbranice dahil). Bitişik harfler ile karşılaşıldığında, orijinal karakterleri geri yükler ...

Bir şans ver.


32
Deneme sürümü yok ve 440 $ "Denemek" için biraz fazla.
Rok Strniša


Bu hizmet bir API aracılığıyla kullanılabilir mi?
bart

1
test ettim, sütunları tanımıyor. İngilizce tabloid ön sayfasını taradım. Metin kağıt üzerinde 3 sütuna bölündü, ancak bu eklenti cümleleri tamamen karıştırdı. Ücretsiz olan Ghostscript aynı çıktıya sahipti.
NoWhereToBeSeen

1
@RedHotScalability: Ayrıca BTW, TET yapar doğru parametrelerle kullanılırsa colums tanır. Ama belgeleri okumak ve nasıl olduğunu öğrenmek için iddialı JS betik bir alıştırma olarak bırakın ...
Kurt Pfeifle

29

Hem linux hem de pencerelerde bulunan etkin bir komut satırı aracı, açık kaynak, ücretsizdir: sadece pdftotext olarak adlandırılır. Bu araç xpdf kütüphanesinin bir parçasıdır.

http://en.wikipedia.org/wiki/Pdftotext


4
Bir sidenote üzerinde: -layouttabloları korumak için anahtarı kullanın, oldukça iyi çalışıyor.
sebastian


12

İşte benim önerim. PDF'den metin çıkarmak istiyorsanız, pdf dosyasını Google Dokümanlar'a içe aktarabilir, ardından .html, .odf, .rtf, .txt vb. Gibi daha kolay bir biçime aktarabilirsiniz. Tüm bunlar Drive API'sını kullanarak . Ücretsizdir * ve sağlamdır. Şuna baksana:

https://developers.google.com/drive/v2/reference/files/insert https://developers.google.com/drive/v2/reference/files/get

Bir dinlenme API'sı olduğundan, TÜM programlama dilleriyle uyumludur. Yukarıda gönderdiğim bağlantıların Java, .NET, Python, PHP, Ruby ve diğerleri dahil birçok dil için çalışma örnekleri var.

Umut ediyorum bu yardım eder.


2
Bu seçeneği kullandım ve tavsiye etmem. Google'ın pdf metin çıkartması pek çok alternatif kadar iyi değildir (özellikle İngilizce olmayanlar için) ve aynı zamanda çok çok sloooow.
Björn Lindqvist

10

PdfTextStream (baktığınızı söylediğiniz) artık tek iş parçacıklı uygulamalar için ücretsiz . Bence kalitesi diğer kütüphanelerden çok daha iyidir (özellikle funky gömülü fontlar gibi şeyler için).

Alternatif olarak, açık kaynak kodlu Apache PDFBox'a da bakmalısınız .


Android'de PdfTextStream desteklenmez. Android için böyle iyi kütüphaneler var mı?
FaisalAhmed

@FaisalAhmed PDFBox ne olacak?
Renaud

Evet PdfBox da android desteklenmez .... Hem PdfTextStream hem de PdfBox android desteklenmeyen bazı awt kısmı kullanır
FaisalAhmed

Android'de iyi çalışan bu kütüphaneyi kullanıyorum github.com/TomRoush/PdfBox-Android
FaisalAhmed


6

Buradaki yorumlardan biri Windows'ta gs kullandı. Aşağıdaki sözdizimiyle Linux / OSX'te de bazı başarılar elde ettim:

gs \
 -q \
 -dNODISPLAY \
 -dSAFER \
 -dDELAYBIND \
 -dWRITESYSTEMDICT \
 -dSIMPLE \
 -f ps2ascii.ps \
 "${input}" \
 -dQUIET \
 -c quit

Bunun dSIMPLEyerine kullandım dCOMPLEXçünkü ikincisi satır başına 1 karakter çıkarır.


5

Soru özellikle PDF'den XML olarak veri almak için alternatif araçlarla ilgili olduğundan, tam olarak bunu yapabilen ticari araç olan "ByteScout PDF Extractor SDK" 'ya bir göz atmak isteyebilirsiniz : konumlandırma verileri (x, y) ve yazı tipi bilgileri:

Kaynak PDF'deki metin:

Products | Units | Price 

Çıktı XML'si:

 <row>
 <column>
  <text fontName="Arial" fontSize="11.0" fontStyle="Bold" x="212" y="126" width="47" height="11">Products</text> 
  </column>
 <column>
  <text fontName="Arial" fontSize="11.0" fontStyle="Bold" x="428" y="126" width="27" height="11">Units</text> 
  </column>
 <column>
  <text fontName="Arial" fontSize="11.0" fontStyle="Bold" x="503" y="126" width="26" height="11">Price</text> 
  </column>
</row>

PS: ayrıca metni tablo tabanlı bir yapıya da böler.

Açıklama: ByteScout için çalışıyorum


3

Şu anda düşünebildiğim en iyi şey ("basit" araçlar listesinde) Ghostscript (mevcut sürüm v.8.71'dir) ve PostScript yardımcı programıdır ps2ascii.ps. Ghostscript libalt dizininde gönderir. Bunu deneyin (Windows'ta):

gswin32c.exe ^
   -q ^
   -sFONTPATH=c:/windows/fonts ^
   -dNODISPLAY ^
   -dSAFER ^
   -dDELAYBIND ^
   -dWRITESYSTEMDICT ^
   -dCOMPLEX ^
   -f ps2ascii.ps ^
   -dFirstPage=3 ^
   -dLastPage=7 ^
   input.pdf ^
   -dQUIET ^
   -c quit

Bu komut, sayfalarının 3-7 input.pdf. ps2ascii.ps"Tuhaf" sayıların ve ek bilgilerin ne anlama geldiğini görmek için dosyanın kendisindeki yorumları okuyun ( dizeleri, konumları, genişlikleri, renkleri, resimleri, dikdörtgenleri, yazı tiplerini ve sayfa sonlarını belirtirler ). "Basit" bir metin çıktısı almak için -dCOMPLEXparçayı değiştirin -dSIMPLE.


2
Tahmin edebileceğiniz gibi, bu sadece ASCII testi yapar. Ücretsiz olsa da, İngilizce dışındaki dillerle planladığınız yazılımlar için mükemmel bir seçenek değildir.
userx

3
@userx: Tahmin edebileceğiniz gibi, bu Özgür yazılım: bu nedenle kaynak kodu mevcut. ASCII dışı desteği desteklemek için genişletilebilir ...
Kurt Pfeifle

@userx: Bugün pdflib.com'dan Metin Çıkarma Araç Seti 'TET'i keşfettim. Diğer cevabımı gör.
Kurt Pfeifle

Ghostscript 9.07'den ps2ascii OpenBSD sistemimde güzel çalıştı. 526 sayfalık PDF'yi düz metne dönüştürdüm. Şimdi notlar için kolayca grep ve metin ayıklayabilirsiniz. Basit komutu kullandım ps2ascii book.pdf notes.txt. Belgeniz ağırlıklı olarak ASCII ise şanslısınız demektir.
Clint Pachl

3

Bu konunun oldukça eski olduğunu biliyorum, ama bu ihtiyaç hala hayatta. Birçok belgeyi, forumu ve komut dosyasını okudum ve sıkıştırılmış ve sıkıştırılmamış pdf'yi destekleyen yeni bir gelişmiş oluşturun:

https://gist.github.com/smalot/6183152

Bazı durumlarda, güvenlik nedeniyle komut satırı yasaktır. Böylece yerli bir PHP sınıfı birçok ihtiyaca cevap verebilir.

Umarım everone yardımcı olur





0

Macintosh sistemlerimde, "Adobe Reader" ın oldukça iyi bir iş çıkardığını görüyorum. Masaüstümde "Adobe Reader.app" yi işaret eden bir takma ad oluşturdum ve tek yaptığım, takma adın üzerine bir pdf dosyası bırakmak, bu da onu Adobe Reader'daki etkin belge haline getiriyor ve ardından Dosya menüsünden, "Metin Olarak Kaydet ..." i seçiyorum, ona bir ad ve nereye kaydedileceğimi "Kaydet" i tıklıyorum ve işim bitti.


5
OP , bir pdf'den programlı olarak metin çıkarmak için bir çözüm aradı . Cevabınız bunun yerine manuel bir rutin öneriyor.
mkl
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.