2012-10-11 41 views
0

我想從被redmon攔截並傳送到python程序的postscript文檔中自動提取地址。我已經到了可以捕獲postscript輸出(並將其寫入文件)的地步,但我被困在提取部分。從postscript提取文本和/或使用python創建覆蓋

是否有一個很好/可靠的方式來做到這一點在Python中,或者我需要通過ps2ascii運行postscript文件,並希望最好?

如果有其他語言的工具,可以做到這一點,我會很樂意對其進行評估。

+0

這取決於後記文件是如何製造了很多。如果你能給我們一個例子,它可能會幫助你。 – lhf

+1

最有可能的最好的辦法將是自己解析它 - 其原因是可以利用周圍的代碼(和註釋),以確定哪些字符串是你需要提取的地址。首先看幾個例子並尋找你的目標字符串。用一些周圍的代碼發佈一個例子。 – agentp

回答

2

因爲我評論了ps2ascii佔用大量的空間:這裏提供了一個「80%」的解決方案來提取字符串,這些字符串在使用python的postscript文件中出現。


import fileinput 
for line in fileinput.input(): 
for p in line.replace('\\(','EscapeLP').replace('\\)','EscapeRP').split('(')[1:]: 
    print p[:p.find(')')].replace('EscapeLP','(').replace('EscapeRP',')') 

請注意,精細格式化(字母)postscript通常會將字符串拆分成小塊(甚至是單個字符)。 ps2ascii在將它們拼湊在一起做的很好,顯然我的簡單腳本不會。

2

事實上,在大多數情況下只是分析PostScript就足夠了,因爲後記文件是一個普通的文本文件。

作爲澄清:是的,我知道Postscript文檔顯示的是用美妙顛倒或反向美麗的語言Postscript編寫的程序的結果。然而,在大多數情況下,對程序源進行grep就足夠了。在其他一些情況下,文本可能被編碼爲曲線或位圖,並且在OCR處理渲染輸出之後無法提取它。

底線:它取決於您想要提取的信息的類型以及postscript文件的類型。在我看來,ps2ascii是一個很好的工具,以及解決問題的一種方式,但一個是(i)並不能保證成功(也許比greping源稍多)(二)在很大程度上只是去掉運營商和( iii)在某些情況下可能導致文本丟失。

+0

postscript docuemtn是一個程序文件 - 可以作爲任何程序讀取。它包含的文本確實可以嵌入程序中的文字字符串中(並且這裏是您的答案的答案) - 但它也可能以各種其他方式進行編碼。 – jsbueno

+0

是的,這就是我寫「在大多數情況下」的原因。 PDF在廣泛傳播之前的很多日子裏一直在使用PS;顯然,您可以將文本編碼爲貝塞爾曲線或位圖,但通常您只需要對其進行grep即可。 – January

+1

注意ps2ascii佔用的空間很大。除非你有或想要鬼影,否則它不會是我的第一道攻擊。 +1爲修改後的答案。討厭看到' - '.. – agentp