Использование регулярных выражений с текстовой строкой из pdf, прочитанной Тикой в ​​python - попытка найти строку, заканчивающуюся на \ n \ n \ n \ n - PullRequest
0 голосов
/ 29 марта 2019

Я отсканировал много страниц документов, сделал их машиночитаемыми с помощью OCR, а затем прочитал их, используя пакет Tika в Python 3, который возвращает одну длинную грязную строку, которую я назвал «полный текст».Я пытаюсь вернуть весь текст, который соответствует этому шаблону:

ОПИСАНИЕ ИНЦИДЕНТА: (бла-бла-бла) \ n \ n \ n \ nStudent

Для справки, это то, что абзац, которыйЯ хочу захватить выглядит так:

Описание инцидента: \ nСтудент сделал бла бла бла.Студент \ nbla бла бла бла.Бла бла бла бла бла бла.\ П \ п \ п \ п!\ nI \ n \ n. \ '= fll \ nBLABLA \ n \ nSCHOOL \ n \ n \' 1 \ n \ nБудет ли ученик бла и / или бла?\ nДа Нет ~ \ nlfyes, прикрепить отчет.\ n \ nВ течение 24 часов родитель / опекун был уведомлен о происшествии?Да: 1 / \ nНет: r: J · \ n \ nБла-бла-бла-бла?ДаО Noif \ n \ nCC: \ n \ nDistrict Qt \ '". / \ NParent / Guardian \' EJ \ n0therO \ n \ nh [t / I lf \ nDate \ n \ n (pis \, 1.-1 \nDate \ n \ n \ n \ nСтудентное имя:

Он всегда начинается с «Описание инцидента» и заканчивается на «\ n \ n \ n \ nStudent». Поэтому я не хочу снимать частьв середине написано "\ n \ n \ n \ n!".

Я пробовал это:

    desc = re.findall("Description of Incident:+.\n\n\n\n", fulltext)
    print(desc)

Но я получаю пустой список.

Однако, если я сделаю:

    desc = re.findall("Description of Incident:+.", fulltext)

Тогда я получу список, который повторяется ['Описание инцидента:'] несколько раз

И если я делаю:

    desc = re.findall("\n\n\n\n", fulltext)

Тогда я получаю ['\ n \ n \ n \ n'] несколько раз

Наконец, если я делаю:

    desc = re.findall("Description of Incident:.+\n.+", fulltext)

Тогда я получаю часть абзаца, но толькодо второго \ n. Пример: ['Описание инцидента: \ nСтудент сделал бла-бла-бла. Студент']

Использование escape-символов не помогает.

1 Ответ

0 голосов
/ 29 марта 2019

Попробуйте выполнить поиск в режиме поиска в режиме DOT ALL, а также слегка измените ваш шаблон:

desc = re.findall("Description of Incident:.*?\n\n\n\n(?=Student\\b)", fulltext, re.DOTALL)

Это работает, по крайней мере, с вашими входными данными выборки.Обратите внимание, что шаблон теперь говорит, что соответствует и потребляет все от Description of Incident: через новые строки, до достижения первого \n\n\n\n, за которым следует (но включает) текст Student.

...