2013-07-17 59 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,因爲它可以讓你看看你的疑似縮寫詞是否在指定的字典中。

相關問題