blog.Ring.idv.tw

Articles

PDFBox - 擷取PDF檔案中的純文字

PDFBox.是一個Open Source的Java PDF Library,可以利用它來協助處理PDF檔案的一些應用(用iText也是可行的,不過它好像不支援擷取純文字「iText in Action, pp. 576」),例如:擷取PDF檔案中的純文字、轉換PDF檔案到Image檔等等.. 諸如此類的應用。

而且「Lucene」就是用它來轉換PDF到純文字再進行索引的~

下述是擷取PDF檔案中的純文字:(FontBox-0.1.0-dev.jar、PDFBox-0.7.3.jar required!)

import java.io.IOException;
import org.pdfbox.pdmodel.PDDocument;
import org.pdfbox.util.PDFTextStripper;

public class PDFTextExtractor
{
    private PDDocument document;
    
    public String extractText(String file) throws IOException
    {
        document = PDDocument.load(file);       
        PDFTextStripper stripper = new PDFTextStripper();
        stripper.setStartPage(1);
        stripper.setEndPage(document.getNumberOfPages());
        return stripper.getText(document);
    }

    public static void main(String[] args)
    {
        PDFTextExtractor extractor = new PDFTextExtractor();
        try
        {
            String text = extractor.extractText("C:\\test.pdf");
            System.out.println(text);
        }catch (IOException e)
        {
            e.printStackTrace();
        }
    }
}

相關資源

.PDF Reference and Adobe Extensions to the PDF Specification - PDF規格書

.Glyph & Cog: Text Extraction - 解釋為何擷取PDF中的純文字不是那麼容易

2009-01-03 18:17:22 | Comments (3)

Twitter - ChingShen

寫了Blog那麼久了... 居然今天才開始用「Twitter」,真是慚愧~~ 還是應該說潛水潛太深了~ XDDD

總之~ 我也要來碎碎唸了~ ^^a follow me: http://twitter.com/chingshen

P.S. 順便裝一下「twhirl」~ 好用的呢!! ^^

2009-01-03 15:18:54 | Comments (2)

邁向 - 2009 - 新年!!

(拿起我的小腳架... 在家自拍一下:p 其實這就是平常我做事的樣子~ 夠專注吧~XDDD)

用自家的「日曆」拿來當翅膀~ 因為要呈現「邁向」的感覺~ 並在翅膀的右半部色調採用「灰階」~ 用來加強表示從過去飛向未來(2009)的fu~ 就這樣~ ^^a

今年.. 嗯~ 很充實~~ 希望明年一樣充實就好~(<<這句話有玄機..XDD 夠忙了~ 保持這樣就好了~ XDDD)

另外格主算了一下~ 本網誌到今天的po文為止~ 平均每「二天」就有一篇po文~ 我的「宅度計」溫度應該算高了吧~ XDDD 不相信!!!! 請看下述程式(計算平均po文天數):

import java.util.Calendar;

public class Main
{
    public static void main(String[] args)
    {
        Calendar ec = Calendar.getInstance();
        ec.set(2009, Calendar.JANUARY,1);
        Calendar bc = Calendar.getInstance();
        bc.set(2007, Calendar.APRIL,30);          
        long t = ec.getTimeInMillis() - bc.getTimeInMillis();   
        long days = t/60/60/1000/24;
        System.out.println(days/306);
    }
}

而新的一年的第一個月的第一件事~ 嗯~ 我要和學弟實作一個延續我碩士成果的系統~ 這件事在我心中的Priority是排行第一的!! 先將這件事情做好~ 其它的事先行排除!!!!!!! 就這樣~ :p

2009-01-01 02:23:01 | Comments (4)

SwfVersion.com - 辨別你的Flash版本服務

SwfVersion.com.是一個由位於挪威的「Tarantell」公司所建立的服務~

如同它所註冊的網域名稱「SwfVersion.com」,它的服務就是提供您不論local或online的Flash動畫,都可以利用此服務來辨別這個動畫檔所發佈的「FlashPlayer版本」、「每秒播放的影格數(FPS)」和「ActionScript版本」。

我好奇的想知道這個服務的需求性和必要性~ 什麼時候我們需要取得這些資訊?(若客倌們有任何idea的話~ 麻煩回覆一下 ^^)

從另一個角度來看~ 的確,如同Google的作法~ 只會有愈來愈多的線上化服務~ 因為後端可以有一大片的「Cloud」當靠山。

相關消息

.swfversion.com

.Learn The Version Of A SWF File: SwfVersion

2008-12-30 20:05:56 | Add Comment

Hadoop - Uncompressed SequenceFile Format 詳解

本文已同步刊於:Hadoop Taiwan User Group

剛剛在研究一個「Uncompressed SequenceFile Format」檔案,一個個對照Hadoop的原始碼來驗證~ 心得整理如下:

從「Class SequenceFile」所描述的~ 基本上「SequenceFiles」有三種不同的檔案格式~ 它們分別為「Uncompressed SequenceFile Format」、「Record-Compressed SequenceFile Format」和「Block-Compressed SequenceFile Format」,後兩種都是採用壓縮的檔案格式~ 而文本主要介紹剖析「Uncompressed SequenceFile Format」~ 了解這一個檔案格式之後~ 另外兩個自然能得心應手~ 而官方針對這個檔案格式的描述如下:

每一種檔案格式都包含了共同的「SequenceFile Header」用來記錄一些基本資訊~ 如:keyClassName、valueClassName等…

本文以下圖的範例來介紹:

筆者已用「紅→藍→綠」顏色的順序來標記~ 以方便對照~

0x53 0x45 0x51

這是SequenceFile Format的magic header「SEQ」,和一般的檔案格式一樣~ 都是用來判別這個檔案是否屬於「SequenceFile Format」。

0x06

版本編號,目前最新版為「SEQ6」。

0x19 0x6F 0x72 ..... 0x74

這部份屬於keyClassName(Key的類別名稱),而第1個Byte(0x19)用來表示此字串的長度,此範例為「org.apache.hadoop.io.Text」。

0x22 0x6F 0x72 ..... 0x65

這部份屬於valueClassName(Value的類別名稱),第1個Byte(0x22)也是用來表示此字串的長度,此範例為「org.apache.hadoop.io.BytesWritable」。

0x00

是否支援compression?「0x00」=否 (此為Boolean所以佔1個Byte)

0x00

是否支援blockCompression?「0x00」=否(此為Boolean所以佔1個Byte)

0x00 0x00 0x00 0x00

metadata資訊,此範例沒有包含任何「SequenceFile.Metadata」的資訊~ 所以輸出「0x00 0x00 0x00 0x00」(此為Int所以佔4個Bytes),而這四個Bytes也等同於metadata的長度,也就是至少一定會佔用這4個Bytes。

0x77 0xE5 0xEF ..... 0xA7

一個sync標記,用來表示一個「Header」的結束,此標記是亂數產生的~ 從原始碼中可得知此標記是由「new UID()+"@"+time」的方式再進行「MD5」編碼。

0x00 0x35 0x62 0x8B

整筆Record的size~ (此為Int佔4個Bytes),一筆Record包含「Key、Value」的內容資訊。

0x00 0x00 0x00 0x2C

Key內容的size~ (此為Int佔4個Bytes)。

0x2B 0x68 0x64 ..... 0x47

由於筆者用「org.apache.hadoop.io.Text」當Key,所以這裡的資訊是描述一個檔案的路徑名稱,第1個Byte(0x2B)用來表示此字串的長度,內容為「hdfs://nlp:9000/user/hdp/image/P1010099.JPG」。

0x00 0x35 0x62 0x5B

Value內容的size~ (此為Int佔4個Bytes)。

0xFF 0xD8 0xFF .....

筆者以JPEG檔案格式做為介紹~ 所以這裡是「0xFF、0xD8」開頭。

最後~ 雖然Hadoop官網沒有公佈詳細的格式介紹(還是我沒找到?) 希望本文能有所助益。

參考資源

.SequenceFile - Hadoop Wiki

.Class SequenceFile

2008-12-25 20:06:27 | Add Comment

Next Posts~:::~Previous Posts
Copyright (C) Ching-Shen Chen. All rights reserved.

::: 分類 :::

::: 最新文章 :::

::: 最新回應 :::