2011-12-22 233 views
4

我需要從上傳的文檔中提取純文本,以使它們可供搜索。文件可以是MS Word或pdf(掃描或包含文本)。有問題的應用程序在LAMP堆棧上運行,但安裝其他軟件可能是一種選擇。有什麼工具,服務,圖書館或者你可以推薦完成這項任務的組合嗎?如何從文檔中提取/識別文本?

+1

對於掃描文檔,我認爲您需要一點[OCR](http://en.wikipedia.org/wiki/Optical_character_recognition) – BoltClock 2011-12-22 19:56:30

+0

從舊式.doc文件中提取文本是嚴重的痛苦。它們並不意味着很容易被解析。 .docx更容易一些,因爲它們大部分都是壓縮的.xml文件。 – 2011-12-22 19:57:52

+0

@BlotClock我知道。我沒有明確提到它,因爲我認爲這很明顯。 – Maarten 2011-12-22 20:15:51

回答

4

可以使用的shell實用程序的組合像pdftotext爲PDF文件,wvWare的文檔,docx2txt.pl爲DOCX的,像textractor ruby​​gem一樣。

# on Ubuntu 
apt-get install wv xpdf-utils links 

也有本地的PHP類提取PDFdocx

另一個rubygem,即使Tesseract也爲您提供OCR,但它是docsplit

將索引和搜索考慮爲Solr可能是個好主意。您可以使用Solr Cell插件來索引和搜索Word文檔,PDF等等。我在我的一個項目中成功使用它。 Solr Cell基於Apache POI,TikaPDFBox等幾個項目。

棘手的部分是設置所有依賴單元格的jar和solr模式,並找出索引請求參數,但都可以從wiki文檔中想到。 Here's我的罐子和模式讓你開始,模式的相關部分是包含「附件」的行。

然而,Solr Cell不會做OCR。您必須首先使用OCR引擎才能使其可搜索。

對於OCR,您可以使用Google開發的OpenSource Engine Tesseract,或者您可能想看看商用引擎Abbyy。兩者都是作爲命令行使用的,你可以從你的php腳本運行。要從Tesseract獲得Abbyy的可比結果,您需要執行一些預處理和後處理1。還有云服務,這可能是一個更容易的選擇。例如,WisetrendAbbyy Cloud。後者目前處於測試階段,所以它是免費的,它已準備好去PHP code samples

+0

Solr Cell是否具有OCR從掃描PDF中提取文本? – Tomato 2011-12-23 11:57:47

+0

我不確定,但我認爲不是。我相信OCR應該進一步完善,我聽說[tesseract](http://code.google.com/p/tesseract-ocr/)是一個很好的免費工具。 – clyfe 2011-12-23 12:17:19

+0

然後,它只是不適用於掃描的PDF。它們應該首先通過一些OCR軟件轉換爲可搜索的PDF(帶有添加的文本層)。 – Tomato 2011-12-26 07:03:38

0

我不知道任何將PDF轉換爲文本的軟件,但對於MS Word部分,您可以使用Apache POI:http://poi.apache.org/,它是使用JAVA構建的,因此您必須從PHP文件執行二進制文件使其工作。

另一個選擇是使用JODConverter(我目前正在使用該目的)http://code.google.com/p/jodconverter/ 所以如果Apache POI不起作用,我知道jodconverter會。我正在使用3.0測試版。

在我的PHP代碼中,我保存上傳文件並在tmp目錄中的文件上執行轉換器二進制文件,該文件將在tmp目錄中創建一個新文件,並從新文件中提取純文本。

+0

注意:通過stdin輸入文件可能更高效,因此您不必先將其保存到磁盤。如果有問題的uitility沒有爲此提供cli開關,則可以在Linux下使用/ dev/stdin。 – Maarten 2012-01-09 18:56:57

3

就我而言,在PHP上使用OCR可以做的事情並不多。最好的解決方案是使用雲服務 - 一種web api,可讓您上傳圖像並將您的數據發送回OCR。試試www.ocrsdk.com,它是ABBYY最近推出的基於雲的OCR SDK。它現在處於測試階段,所以它可以完全免費使用,並且已準備好去PHP code samples。Disclamer:我的工作@ ABBYY

+0

有趣!由於這只是解決方案的一部分,不過,我編輯了另一個答案(編輯仍處於未決狀態)。我希望你原諒我。 – Maarten 2012-01-09 18:59:02