2008-10-01 13 views
26

मेरे पास एक पीडीएफ फाइल है, जिसमें डेटा है जिसे हमें डेटाबेस में आयात करने की आवश्यकता है। फाइलें मुद्रित अल्फान्यूमेरिक टेक्स्ट के पीडीएफ स्कैन प्रतीत होती हैं। 10 pt की तरह लग रहा है। टाइम्स न्यू रोमन।प्रोग्रामेटिक रूप से पीडीएफ फ़ाइल में स्कैन से पाठ को पहचानें

क्या कोई उपकरण या घटक हैं जो मुझे इस पाठ को पहचानने और विश्लेषण करने की अनुमति दे सकते हैं?

उत्तर

22

मैंने सीएसवी में पीडीएफ से सफलतापूर्वक स्ट्रिप करने के लिए pdftohtml का उपयोग किया है। यह Xpdf पर आधारित है, जो एक अधिक सामान्य उद्देश्य उपकरण है, जिसमें pdftotext शामिल है। मैं बस इसे एक प्रक्रिया के रूप में लपेटता हूं। सी # से प्रारंभ करें।

आप थोड़ा और DIY कुछ के लिए देख रहे हैं, वहाँ iTextSharp पुस्तकालय है - जावा के iText के एक बंदरगाह - और PDFBox (हाँ, यह जावा का कहना है - लेकिन वे IKVM.NET के माध्यम से एक .NET संस्करण है)। यहां C# से iTextSharp और PDFBox का उपयोग करने पर कुछ कोडप्रोजेक्ट आलेख दिए गए हैं।

और, यदि आप वास्तव में एक मासोचिस्ट हैं, तो आप COM इंटरऑप के साथ एडोब के PDF IFilter में कॉल कर सकते हैं। IFilter specs बहुत आसान है, लेकिन मुझे लगता है कि इंटरऑप ओवरहेड महत्वपूर्ण होगा।

संपादित करें: प्रश्न और बाद के उत्तरों को फिर से पढ़ने के बाद, यह स्पष्ट हो गया है कि ओपी अपने पीडीएफ में छवियों से निपट रहा है। उस स्थिति में, आपको छवियों को निकालने की आवश्यकता होगी (उपरोक्त पीडीएफ पुस्तकालय काफी आसानी से ऐसा करने में सक्षम हैं) और इसे ओसीआर इंजन के माध्यम से चलाएं।

मैंने सभ्य परिणामों के साथ पहले MODI इंटरैक्टिव रूप से उपयोग किया है।यह भी है doable और सुंदर simple तो इंटरॉप के माध्यम से सी # से बुला कॉम दिया गया है:

' lifted from http://en.wikipedia.org/wiki/Microsoft_Office_Document_Imaging 
Dim inputFile As String = "C:\test\multipage.tif" 
Dim strRecText As String = "" 
Dim Doc1 As MODI.Document 

Doc1 = New MODI.Document 
Doc1.Create(inputFile) 
Doc1.OCR() ' this will ocr all pages of a multi-page tiff file 
Doc1.Save() ' this will save the deskewed reoriented images, and the OCR text, back to the inputFile 

For imageCounter As Integer = 0 To (Doc1.Images.Count - 1) ' work your way through each page of results 
    strRecText &= Doc1.Images(imageCounter).Layout.Text ' this puts the ocr results into a string 
Next 

File.AppendAllText("C:\test\testmodi.txt", strRecText)  ' write the OCR file out to disk 

Doc1.Close() ' clean up 
Doc1 = Nothing 

दूसरों Tesseract की तरह है, लेकिन मैं इसके साथ प्रत्यक्ष अनुभव है। मैंने इसके बारे में अच्छी और बुरी चीजें दोनों सुनी हैं, इसलिए मुझे लगता है कि यह आपकी स्रोत गुणवत्ता पर निर्भर करता है।

+0

यह संसाधनों का एक उत्कृष्ट सूची था .. धन्यवाद – torial

+0

अगर पीडीएफ, एक स्कैनर से है तो यह वास्तव में सिर्फ एक छवि हो जाएगा और PDFbox नहीं किया जाएगा इससे टेक्स्ट प्राप्त करने में सक्षम: [पीडीएफबॉक्स पाठ पीडीएफ से पाठ पार्स करने के बारे में] (http://pdfbox.apache.org/userguide/faq.html#notext)। इसके अलावा, @ jm4 – mmcrae

1

आप पाठ निकालने के लिए पर्ल के PDF की तरह एक मॉड्यूल का उपयोग कर सकते हैं। और डेटाबेस में प्रासंगिक जानकारी आयात करने के लिए एक और उपकरण का उपयोग करें।

मुझे यकीन है कि .NET के लिए पीडीएफ घटक हैं, लेकिन मैंने किसी भी कोशिश नहीं की है, इसलिए मुझे नहीं पता कि क्या अच्छा है।

http://www.activepdf.com/products/serverproducts/toolkit/index.cfm

मुझे लगता है कि आप कम से कम मानक या प्रो संस्करण आवश्यकता होगी, लेकिन अभी आप कर सकते हैं वे एक परीक्षण अवधि:

2

एक कंपनी मैं के लिए काम करता था, हम कुछ सफलता ActivePDF टूलकिट का इस्तेमाल किया देखें कि यह वही करेगा जो आप चाहते हैं।

0

मुझे हाल ही में पाइथन के लिए ReportLab मिला है।

1

यदि पीडीएफ मुद्रित पाठ का स्कैन है, तो यह कठिन होगा (छवि प्रसंस्करण, चरित्र पहचान आदि शामिल है) इसे स्वयं करने के लिए। पीडीएफ आमतौर पर स्कैन किए गए दस्तावेज़ों को आंतरिक रूप से जेपीईजी के रूप में संग्रहीत करेगा। आप किसी तृतीय पक्ष टूल (ओसीआर टूल) का उपयोग करने के बेहतर हैं जो ऐसा करता है।

7

आप पीडीएफ से स्कैन किए गए टेक्स्ट को निकालने नहीं कर सकते हैं। आपको ओसीआर सॉफ्टवेयर की आवश्यकता है। अच्छी खबर यह है कि कुछ ओपन सोर्स एप्लिकेशन हैं जो आप कोशिश कर सकते हैं और ओसीआर मार्ग टेक्स्ट निकालने के लिए पीडीएफ लाइब्रेरी का उपयोग करने से अधिक आसान होगा। टेस्सेक्ट और जीओसीआर देखें।

0

यदि मुझे यह सही लगता है, तो शेबेज पीडीएफ फ़ील्ड निकालने और डेटा को डेटाबेस में लोड करने के लिए कह रहा है। क्या आपने iTextSharp को देखा है? - http://sourceforge.net/projects/itextsharp/

5

मैंने अपने ब्लॉग में से एक में पीडीएफ को पार्स करने के बारे में पोस्ट किया है।

http://devpinoy.org/blogs/marl/archive/2008/03/04/pdf-to-text-using-open-source-library-pdfbox-another-sample-for-grade-1-pupils.aspx

संपादित करें:: लिंक कोई लंबी काम करता है इस लिंक मारो। नीचे http://web.archive.org/web/20130507084207/http://devpinoy.org/blogs/marl/archive/2008/03/04/pdf-to-text-using-open-source-library-pdfbox-another-sample-for-grade-1-pupils.aspx

ठीक है, निम्नलिखित वेब पर उपलब्ध लोकप्रिय उदाहरणों पर आधारित है। यह क्या करता है पीडीएफ फ़ाइल "पढ़ा" है और इसे फॉर्म में समृद्ध टेक्स्ट बॉक्स नियंत्रण में एक पाठ के रूप में आउटपुट करता है। .NET लाइब्रेरी के लिए पीडीएफबॉक्स स्रोतforge से डाउनलोड किया जा सकता है।

आप IKVM.GNU.Classpath & PDFBox-0.7.3 के संदर्भ में जोड़ने की जरूरत है। और भी, FontBox-0.1.0-dev.dll और PDFBox-0.7.3.dll को आपके अनुप्रयोग के बिन फ़ोल्डर पर जोड़ा जाना आवश्यक है। किसी कारण से मैं (शायद यह ट्यूटोरियल में से एक से) को याद नहीं कर सकता है, मैंने बिन IKVM.GNU.Classpath.dll में भी जोड़ा।

साइड नोट पर, मुझे अमेज़ॅन से "हेड फर्स्ट सी #" (कीथ के सुझाव) की मेरी प्रति मिली। किताब शांत है! यह वास्तव में शुरुआती लोगों के लिए लिखा गया है। इस संस्करण में वीएस -2008 और फ्रेमवर्क 3.5 शामिल हैं।

ये रहा ...

/* Marlon Ribunal 
* Convert PDF To Text 
* *******************/ 

using System; 
using System.Collections.Generic; 
using System.Drawing; 
using System.Windows.Forms; 
using System.Drawing.Printing; 
using System.IO; 
using System.Text; 
using System.ComponentModel.Design; 
using System.ComponentModel; 
using org.pdfbox.pdmodel; 
using org.pdfbox.util; 

namespace MarlonRibunal.iPdfToText 
{ 
    public partial class MainForm : Form 
    { 
     public MainForm() 
     { 
      InitializeComponent(); 
     } 

     void Button1Click(object sender, EventArgs e)  
     {  
      PDDocument doc = PDDocument.load("C:\\pdftoText\\myPdfTest.pdf"); 
      PDFTextStripper stripper = new PDFTextStripper(); 
      richTextBox1.Text=(stripper.getText(doc)); 
     } 

    } 
} 
+0

द्वारा उत्तर देखें! मुझे सिरदर्द बचाया! – JasonS

+4

उपर्युक्त लिंक अब काम नहीं करता है - "डेटा प्रदाता से कनेक्शन खोलने में असमर्थ" त्रुटि संदेश प्राप्त करें – jontsnz

+1

यदि पीडीएफ स्कैन की गई छवि है तो पीडीएफबॉक्स पीडीएफ से टेक्स्ट प्राप्त नहीं कर पाएगा: [मुझे कैसे कोई पाठ नहीं मिल रहा है पीडीएफ दस्तावेज से?] (http://pdfbox.apache.org/userguide/faq.html#notext) – mmcrae