2012-10-11 128 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