Регулярное выражение для извлечения фрагментов текста из текстового файла? - PullRequest
2 голосов
/ 29 сентября 2019

Мне нужно извлечь заголовки и фрагмент текста под ними из текстового файла в Python, используя регулярные выражения, но я нахожу это трудным.

Я преобразовал PDF в текст, чтобы он теперь выглядел следующим образом:

img

До сих пор я мог получить всечисловые заголовки (12.4.5.4, 12.4.5.6, 13, 13.1, 13.1.1, 13.1.12) с использованием следующего регулярного выражения:

import re

with open('data/single.txt', encoding='UTF-8') as file:

    for line in file:
        headings = re.findall(r'^\d+(?:\.\d+)*\.?', line)
        print(headings)`

Я просто не знаю, как получить сформулированную частьэтих заголовков или абзаца текста под ними.

РЕДАКТИРОВАТЬ - Вот текст:

IS EN 60601-1: 2006 & A1: 2013 & AC: 2014 & A12: 2014

60601-1 © IEC: 2005 60601-1 © IEC: 2005

- 337 - - 169 -

12.4.5.4 Другое ME ИЗДЕЛИЕ, производящее диагностическое или терапевтическое излучение При необходимостиПРОИЗВОДИТЕЛЬ должен указать в ПРОЦЕССЕ УПРАВЛЕНИЯ РИСКАМИ РИСКИ, связанные с ME ИЗДЕЛИЕМ, производящим диагностическое или терапевтическое излучение, отличное от диагностического рентгеновского излучения и лучевой терапии (см. 12.4.5.2 и 12.4.5.3).

Соответствие проверяют осмотром ФАЙЛА УПРАВЛЕНИЯ РИСКАМИ.

12.4.6 Диагностическое или терапевтическое акустическое давление Когда это применимо, ИЗГОТОВИТЕЛЬ должен указать в ПРОЦЕССЕ УПРАВЛЕНИЯ РИСКАМИ РИСКИ, связанные с диагностическим или терапевтическим лечением. акустическое давление.

Соответствие проверяют осмотром ФАЙЛА УПРАВЛЕНИЯ РИСКАМИ.

13 * ОПАСНЫЕ СИТУАЦИИ и условия неисправностей

13.1 Особые ОПАСНЫЕ СИТУАЦИИ

  • Общие положения

13.1.1 При применении ЕДИНЫХ НЕИСПРАВНОСТЕЙ, как описано в 4.7 и перечисленных в 13.2, по одному, ОПАСНЫЕ СИТУАЦИИ в 13.1.2–13.1.4 (включительно) не должны возникатьв ME ИЗДЕЛИЯ.

Отказ любого компонента за раз, который может привести к ОПАСНОЙ СИТУАЦИИ, описан в 4.7.

  • Выбросы, деформация ENCLOSURE или превышение максимальной температуры

13.1.2 Не допускаются следующие ОПАСНЫЕ СИТУАЦИИ: - выброс пламени, расплавленного металла, ядовитых или воспламеняющихся веществв опасных

количествах;

- деформация ENCLOSURES до такой степени, что нарушается соответствие 15.3.1;-

температуры ПРИКЛАДНЫХ ЧАСТЕЙ, превышающие допустимые значения, указанные в таблице 24, при измерении, как описано в 11.1.3;температуры деталей ME ИЗДЕЛИЯ, которые не являются ПРИКЛАДНЫМИ ЧАСТЯМИ, но могут быть затронуты, превышая допустимые значения в Таблице 23 при измерении и регулировке, как описано в 11.1.3;

-

- превышение допустимых значений для «других компонентов и материалов», указанных в таблице 22, в 1,5 раза минус 12,5 ° C. Пределы обмоток приведены в таблице 26, таблице 27 и таблице 31. Во всех других случаях применяются допустимые значения таблицы 22.

Температуры должны измеряться с использованием метода, описанного в 11.1.3.

ОДИНОЧНЫЕ НЕИСПРАВНОСТИ в пунктах 4.7, 8.1 b), 8.7.2 и 13.2.2, касающиеся излучения пламени, расплавленного металла или воспламеняющихся веществ, не должны применяться к частям и компонентам, если: -Конструкция или цепь питания ограничивают рассеиваемую мощность в ОДНОМ ОТКАЗЕ

СОСТОЯНИЕ менее 15 Вт или рассеиваемую энергию менее 900 Дж.

Ответы [ 3 ]

2 голосов
/ 29 сентября 2019

Вы можете использовать свой шаблон и сопоставить пробел после него, за которым следует остальная часть строки.

Затем повторите сопоставление всех следующих строк, которые не начинаются с заголовка.

^\d+(?:\.\d+)* .*(?:\r?\n(?!\d+(?:\.\d+)* ).*)*
  • ^\d+(?:.\d+)* Ваш шаблон соответствует заголовку с пробелом
  • .* Соответствует любому символу, кроме новой строки 0+ раз
  • (?: Группа без захвата
    • \r?\n Соответствует новой строке
    • (?! Отрицательный взгляд вперед, утверждайте, что прямо направо не
      • \d+(?:.\d+)* Шаблон заголовка
    • ) Закрыть взгляд
    • .* Совпадение с любым символом, кроме новой строки 0+ раз
  • )* Закрыть группу без захвата и повторить 0+ время совпадения для всех строк

Regex demo

1 голос
/ 01 октября 2019

Благодаря их подробным ответам и полезным объяснениям я в итоге объединил части кода @ The-четвертой птицы и кода @ Эммы в это регулярное выражение, которое, кажется, прекрасно работает для того, что мне нужно.

(^\d+(?:\.\d+)*\s+)((?![a-z])[\s\S].*(?:\r?\n))([\s\S]*?)(?=^\d+(?:\.\d+)*\s+(?![a-z]))

Здесь REGEX DEMO .

Я делаю то, что хочу: разбиваю (числовой заголовок), (заголовок) и (текст) на группы, разделенные запятыми, что позволяет мне разделить их на столбцы в Excel, используяпользовательский разделитель ), ( и некоторые другие постобработки.

Приятно, что в этом новом регулярном выражении пропускаются пронумерованные заголовки, которые являются просто ссылками, а не фактически заголовками, как показано здесь:

img

1 голос
/ 29 сентября 2019

Может быть,

^(\d+(?:\.\d+)*)\s+([\s\S]*?)(?=^\d+(?:\.\d+)*)|^(\d+(?:\.\d+)*)\s+([\s\S]*)

может быть достаточно близко, чтобы получить те желаемые тексты, которые я угадываю.


Здесь мы просто будем искать строки, которые начинаютсяс помощью

^(\d+(?:\.\d+)*)\s+

затем мы просто собираем что-нибудь впоследствии, используя

([\s\S]*?)

до следующей строки, которая начинается с

(?=^\d+(?:\.\d+)*)

Тогда, мы можем или не можем, в зависимости от того, как может выглядеть наш вход, только один последний элемент, который мы собираем, используя этот последний:

^(\d+(?:\.\d+)*)\s+([\s\S]*)

, который мы затем изменим (используя |) к предыдущему выражению.

Несмотря на то, что этот метод прост для кодирования, он довольно медленный с точки зрения производительности, поскольку мы используем обходные пути, поэтому другой ответ здесь гораздо лучше, если сложность по времени будетбеспокойство, которое, вероятно, будет.

Демонстрация 1

Тест

import re

regex = r"^(\d+(?:\.\d+)*)\s+([\s\S]*?)(?=^\d+(?:\.\d+)*)|^(\d+(?:\.\d+)*)\s+([\s\S]*)"
string = """

I.S. EN 60601-1:2006&A1:2013&AC:2014&A12:2014

60601-1 © IEC:2005 
60601-1 © IEC:2005

– 337 – 
– 169 –

12.4.5.4  Other ME EQUIPMENT producing diagnostic or therapeutic radiation 
When  applicable,  the  MANUFACTURER  shall  address  in  the  RISK  MANAGEMENT PROCESS  the 
RISKS associated  with  ME EQUIPMENT  producing  diagnostic or therapeutic radiation  other  than 
for diagnostic X-rays and radiotherapy (see 12.4.5.2 and 12.4.5.3). 

Compliance is checked by inspection of the RISK MANAGEMENT FILE.

12.4.6  Diagnostic or therapeutic acoustic pressure 
When  applicable,  the  MANUFACTURER  shall  address  in  the  RISK  MANAGEMENT PROCESS  the 
RISKS associated with diagnostic or therapeutic acoustic pressure. 

Compliance is checked by inspection of the RISK MANAGEMENT FILE.

13  *  HAZARDOUS SITUATIONS and fault conditions

13.1  Specific HAZARDOUS SITUATIONS

*  General 

13.1.1 
When  applying  the  SINGLE  FAULT  CONDITIONS  as  described  in  4.7  and listed  in  13.2,  one  at  a 
time,  none  of  the  HAZARDOUS  SITUATIONS  in  13.1.2  to  13.1.4  (inclusive)  shall  occur  in  the 
ME EQUIPMENT.

The failure of any one component at a time, which could result in a  HAZARDOUS  SITUATION, is 
described in 4.7. 

*  Emissions, deformation of ENCLOSURE or exceeding maximum temperature 

13.1.2 
The following HAZARDOUS SITUATIONS shall not occur: 
–  emission  of  flames,  molten  metal,  poisonous  or  ignitable  substance  in  hazardous 

quantities; 

–  deformation of ENCLOSURES to such an extent that compliance with 15.3.1 is impaired; 
– 

temperatures  of  APPLIED  PARTS exceeding  the  allowed  values  identified  in  Table  24  when 
measured as described in 11.1.3; 
temperatures  of  ME EQUIPMENT  parts  that  are  not  APPLIED  PARTS but  are  likely  to  be 
touched,  exceeding  the  allowable  values  in  Table  23  when  measured  and  adjusted  as 
described in 11.1.3; 

– 

–  exceeding the allowable values for “other components and materials” identified in Table 22 
times 1,5 minus 12,5 °C. Limits for windings are found in Table 26, Table 27 and Table 31. 
In all other cases, the allowable values of Table 22 apply. 

Temperatures shall be measured using the method described in 11.1.3. 

The  SINGLE  FAULT  CONDITIONS  in  4.7,  8.1 b),  8.7.2  and  13.2.2,  with  regard  to  the  emission  of 
flames,  molten  metal  or  ignitable  substances,  shall  not  be  applied  to  parts  and  components 
where: 
–  The  construction  or  the  supply  circuit  limits  the  power  dissipation  in  SINGLE  FAULT 

CONDITION to less than 15 W or the energy dissipation to less than 900 J. 

"""

print(re.findall(regex, string, re.M))

Выход

[('12.4.5.4', 'ДругиеME ИЗДЕЛИЕ, производящее диагностическое или терапевтическое излучение \ nЕсли применимо, ИЗГОТОВИТЕЛЬ должен указать в ПРОЦЕССЕ УПРАВЛЕНИЯ РИСКАМИ \ n РИСКИ, связанные с ME ИЗДЕЛИЕМ, производящим диагностическое или терапевтическое излучение, отличное от \ n, для диагностического рентгеновского и лучевого лечения (см. 12.4.5.2 и 12.4. 5.3). \ N \ nСоответствие проверяется путем проверки ФАЙЛА УПРАВЛЕНИЯ РИСКАМИ. \ N \ n ',' ',' '), ('12 .4.6', 'Диагностическое или терапевтическое акустическое давление \ nЕсли применимо, ИЗГОТОВИТЕЛЬ долженв ПРОЦЕССЕ УПРАВЛЕНИЯ РИСКАМИ обращайтесь к \ nРИСКАМ, связанным с диагностическим или терапевтическим акустическим давлением. \ n \ nСоответствие проверяется проверкой ФАЙЛА УПРАВЛЕНИЯ РИСКАМИ. \ n \ n ',' ',' '), (' 13 ','* ОПАСНЫЕ СИТУАЦИИ и состояния неисправностей \ n \ n ',' ',' '), ('13 .1', 'Особые ОПАСНЫЕ СИТУАЦИИ \ n \ n * General \ n \ n', '', ''), ('13 .1.1 ',' При применении ЕДИНЫХ НЕИСПРАВНОСТЕЙ в качестве описаниякровать в 4.7 и перечисленные в 13.2, по одному, \ nME ОБОРУДОВАНИЕ не должно происходить ни в одном из ОПАСНЫХ СИТУАЦИЙ в 13.1.2–13.1.4 (включительно). \ n \ nОшибка любого одного компонента за раз, которая может привести к ОПАСНОЙ СИТУАЦИИ, описана в 4.7. \ n \ n * Выбросы, деформация ENCLOSURE или превышение максимальной температуры \ n \ n ',' ',' '), (' ',' ', '13 .1.2', 'Следующие ОПАСНЫЕ СИТУАЦИИ не должны возникать: \n– выброс пламени, расплавленного металла, ядовитых или воспламеняющихся веществ в опасные \ n \ nnantities; \ n \ n– деформация ENCLOSURES до такой степени, что нарушается соблюдение 15.3.1; \ n– \ n \ ntepts of APPLIEDЧАСТИ, превышающие допустимые значения, указанные в Таблице 24, при измерении, как описано в 11.1.3, - температуры деталей ME ИЗДЕЛИЯ, которые не являются ПРИМЕНЯЕМЫМИ ЧАСТЯМИ, но, вероятно, будут затронуты, превышая допустимые значения в Таблице 23, когда они измерены и скорректированы как\ nописано в 11.1.3; \ n \ n– \ n \ n–, превышающее допустимые значения для «других компонентов и материалов», указанных в таблице 22 \ n × 1,5 минус 12,5 ° C. Пределы для обмоток находятся вТаблица 26, Таблица 27 и Таблица 31. \ nВо всех остальных случаях применяются допустимые значения из таблицы 22. \ n \ nТемпературы должны измеряться с использованием метода. описано в 11.1.3. \ n \ nОДНОВРЕМЕННЫЕ УСЛОВИЯ ОТКАЗОВ в пунктах 4.7, 8.1 b), 8.7.2 и 13.2.2, касающиеся излучения \ n пламени, расплавленного металла или воспламеняющихся веществ, не должны применяться к деталям и компонентам \ n где:- Конструкция или цепь питания ограничивают рассеиваемую мощность в ОДНОМ ОТКАЗЕ \ n \ nCONITITION менее 15 Вт или рассеиваемую энергию менее 900 Дж. \ N \ n ')]

...