Extract text dari file PDF hasil scan menggunakan pdfimages dan tesseract-ocr


Meng-extract text dari file pdf yang dibuat menggunakan software seperti misalnya export dari OpenOffice.org atau Ms Office dapat dilakukan menggunakan berbagai software yang tersedia, baik online maupun offline. Lihat hasil Google dari link ini.

Dengan menggunakan pdfimages dan tesseract-ocr kita dapat membuat sendiri aplikasi untuk meng-extract text dari file PDF hasil scan, yang sebenarnya adalah image yang di-attach ke file PDF tersebut.


Tulisan ini menggunakan:

Kedua aplikasi ini dijalankan dari command line, contoh berikut ini menggunakan tag cfexecute untuk menjalankannya.

<!--- base directory dari file pdf & output --->
<cfset baseDirectory = "H:\scanned-pdf\">
<!--- file yang akan di-extract --->
<cfset scannedPDFFile = "tesseract-xpdf.pdf"> 

<!--- struct dari program pdfImages --->
<cfset pdfImages = {
		<!--- exe full path --->
		"path" = "H:\xpdfbin-win-3.03\bin32\pdfimages.exe",
		"args" = [
			<!--- full path file yang akan di-extract --->
			baseDirectory & scannedPDFFile,
			<!--- full path output dari pdfImages --->
			baseDirectory & "xpdf-output\"
		]
	}
>

<!--- struct dari program Tesseract OCR --->
<cfset tesseract = {
		<!--- exe full path --->
		"path" = "C:\Program Files\Tesseract-OCR\tesseract.exe",
		<!--- path output dari pdfImages --->
		"imagenamePath" = pdfImages.args[2],
		<!--- path output dari Tesseract OCR --->
		"outputDirectory" = baseDirectory & "tesseract-output\",
		<!--- output base file name --->
		"outputBaseFileName" = ListFirst(scannedPDFFile, "."),
		<!--- jika menggunakan bahasa indonesia --->
		"indonesia" = "-l ind",
		"args" = [
			<!--- full path output dari pdfImages --->
			<!--- full path outputDirectory dari Tesseract OCR (tanpa file extension) --->
			<!--- opsi bahasa --->
		]		
	}
>

<!--- recreate directory untuk membersihkan file dari hasil menjalankan program sebelumnya --->
<cfif DirectoryExists(tesseract.imagenamePath)>
	<cfdirectory action="delete" directory="#tesseract.imagenamePath#" recurse="true" >
</cfif>
<cfdirectory action="create" directory="#tesseract.imagenamePath#">

<cfif DirectoryExists(tesseract.outputDirectory)>
	<cfdirectory action="delete" directory="#tesseract.outputDirectory#" recurse="true">
</cfif>
<cfdirectory action="create" directory="#tesseract.outputDirectory#">

<!--- 
	execute pdfImage, 
	timeout 10 detik untuk memastikan program sudah selesai dijalankan
	
	outputnya bisa multiple file, tergantung dari jumlah halaman file pdf
	nama file output mengikuti pattern -000.pbm, -001.pbm, -002.pbm dst 
--->
<cfexecute name="#pdfImages.path#" arguments="#pdfImages.args#" timeout="10" />

<!---
	list semua file output pdfImages
--->
<cfdirectory action="list" directory="#tesseract.imagenamePath#" name="imagenamePath">

<!--- 
	loop execute Tesseract OCR
--->
<cfloop query="imagenamePath" >
	
	<cfset ArrayClear(tesseract.args)>
	
	<!--- full path output dari pdfImages --->
	<cfset ArrayAppend(tesseract.args, imagenamePath.DIRECTORY & "\" & imagenamePath.NAME)>
	
	<!--- full path outputDirectory dari Tesseract OCR (tanpa file extension) --->
	<cfset ArrayAppend(tesseract.args, tesseract.outputDirectory & tesseract.outputBaseFileName & imagenamePath.NAME)>
	
	<!---
		jika menggunakan opsi bahasa indonesia
		<cfset ArrayAppend(tesseract.args, tesseract.indonesia)>
	--->
	
	<!--- executre Tesseract OCR --->
	<cfexecute name="#tesseract.path#" arguments="#tesseract.args#" timeout="10" >
	
</cfloop>

Download sample file pdf yang digunakan dalam tulisan ini. File pdf ini adalah hasil scan yang sengaja di-scan agak miring untuk menambah tingkat kesulitan proses extract.

pdfimages menghasilkan file dengan extensi .pbm.

Testing menggunakan ColdFusion 10.0 menghasilkan output text yang lebih baik menggunakan pdfimages jika dibandingkan dengan menggunakan cfpdf action=”thumbnail” untuk membuat file image yang akan di-extract menggunakan tesseract-ocr.

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s

%d blogger menyukai ini: