Как найти сокращения в файле PDF
В моей диссертации мне нужно добавить список сокращений. Мне было интересно, как это можно запрограммировать. Я нашел хорошую утилиту pdfgrep, которая также получает регулярные выражения. Я использовал это таким образом:
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)
3 ответа
Ответ сильно зависит от того, что вы считаете аббревиатурой, как спросил 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)
ОБНОВИТЬ:
Другое предложение (учитывая пример "ToC") будет [A-Z][a-zA-Z]*[A-Z]
, которая соответствует строке, которая начинается и заканчивается в верхнем регистре: ToC, TOC, WOW, WoW, TOoTS и т. д.
Видя, как аббревиатуры (я верю в вашем случае) только столицы. Тогда все, что вам нужно добавить, это
PATTERN = '[A-Z][A-Z]+'
Который проверит как минимум 2 заглавные буквы.
Я бы пошел на ([A-Z][a-zA-Z0-9+\.\&]*[A-Z0-9])\W
это должно поймать WoW W8 P&L, P+P и т. д., разрешив любые комбинации строчных букв.
Я также настоятельно рекомендую использовать PyEnchant, поскольку он позволит вам увидеть, есть ли в вашем словаре предполагаемая аббревиатура.