Как найти сокращения в файле 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, поскольку он позволит вам увидеть, есть ли в вашем словаре предполагаемая аббревиатура.

Другие вопросы по тегам