2013-07-17 63 views
0

在我的论文中,我需要添加首字母缩略词列表。我想知道如何编程。我找到了很好的工具pdfgrep,它也得到了正则表达式。我用它以这样一种方式:如何在pdf文件中查找首字母缩略词

pdfgrep "([A-Z]+)" thesis.pdf 

这是最好的正则表达式我已经找到了这个目的,但它也得到单大写字母。有没有人有更好的解决方案? 我写了一个Python代码与输出涉及:

import subprocess 
import shlex 
import re 

FOLDER = 'full folder' 
THESIS = '%s/thesis.pdf'%(FOLDER) 
OUTPUT_FILE = '%s/acronymsInMyThesis.txt'%(FOLDER) 
PATTERN = '([A-Z]+)' 

def searchAcronymsInPDF(): 
    output = pdfSearch() 
    acrs = [] 
    for reg in re.findall(PATTERN, output): 
     reg.strip() 
     if (len(reg)>1): 
      acrs.append(reg) 
    return set(acrs) 

def pdfSearch(): 
    command = 'pdfgrep "%s" %s'%(PATTERN,THESIS) 
    output = shellCall(command) 
    return output 

def shellCall(command): 
    p = subprocess.Popen(shlex.split(command), stdout=subprocess.PIPE) 
    out, _ = p.communicate() 
    return out 

if __name__ == '__main__': 
    acrs = searchAcronymsInPDF() 
    print(acrs) 
+1

'[A-Z] [A-Z] +'?或'[A-Z] {2,}'?什么是你的缩写? “S.H.I.E.L.D.”吗?是'ToC'吗? –

+0

这是一个很好的问题。我决定这将是至少2个大写字母的序列。但是,正如你所说,它不会抓住ToC。 –

回答

1

看到,因为首字母缩写词(我相信你的情况下)只有大写字母。然后,所有你需要补充的是

PATTERN = '[A-Z][A-Z]+'

这将检查至少2个大写字母。

+0

太好了,谢谢,我改变了重新模式。 –

1

答案在很大程度上取决于你认为什么是缩写,正如m.buettner所问。

作为一般的建议,您可以使用[A-Z]{2,}|([A-Z].){2,}[A-Z]?,这会匹配以下几件事:

AS | ASD | etc. (two or more) 
A.S. | A.S.D. | etc. (two or more letters+period, ending with period) 
A.S.D | A.S.D.F | etc. (two or more letters+period, ending without period) 

UPDATE:

另一项建议(给予 “的ToC” 为例)是[A-Z][a-zA-Z]*[A-Z] ,它匹配以大写字母开头和结尾的字符串:ToC,TOC,WOW,WoW,TOoTS等。

0

我会为([A-Z][a-zA-Z0-9+\.\&]*[A-Z0-9])\W这应该抓WOW W8 P & L,P + P等允许任意组合的小写字母。

我也强烈地考虑使用PyEnchant,因为它可以让你看看你的疑似缩写词是否在指定的字典中。

相关问题