Как достать из текста интересующую информацию?

Доброго времени суток обитатели сего ресурса. Столкнулся на работе со следующей проблемой: Я написал скрипт, который достает текст из вордовских файлов и считывает определённые данные для добавления их в строку таблицы. Если с номером протокола, заказа, названия протокола, даты выпуска проблем не возникло, то вот с определением объекта испытания и методики проведения испытания есть определенные проблемы. Дело в том, что эти данные находятся в смешанном виде с другим текстом, а их расположение может быть произвольным, поэтому достать эти данные с помощью регулярных выражений представляется довольно сложным или вообще невозможным. Примеры(объекты испытаний выделены жирным шрифтом):

  • На испытания были предоставлены фиксаторы тормозных трубок в количестве 6шт., из которых 2 шт. используются на автомобилях...

  • На испытания были предоставлены заказчиком объекты испытаний - пружины №412300-1221408-30-010-6 в количестве 8

  • На испытания был предоставлены заказчиком образцы пружин тормозного механизма автомобиля «-----» и механизма Knott, в общем количестве 2 шт.

Порой объекты испытаний содержатся в таблице:

На испытания были предоставлены заказчиком образцы **клеевых соединений** различных видов клея, для испытаний на отрыв и сдвиг. ...

Таблица 1 – Перечень объектов испытаний
Маркировка  Марка клея  Количество на отрыв, шт Количество на сдвиг, шт
1   **№ФМФМФ**  5   5
2   **№21321321**   5   5
3   **№афац123**    5   5
4   **№йцуцйу** 5   5
5   **№йцуцйуцй**   5   5

Каким образом это все можно автоматизировать? Может быть есть технология, про которую я не знаю?


Ответы (2 шт):

Автор решения: rotabor

Делайте обработку исходя из имеющихся данных. На данный момент я вижу следующее:

  1. Ключевая фраза "На испытания были предоставлены".
  2. Объект испытаний выделен жирным шрифтом в том же абзаце.
  3. Если после абзаца с ключевой фразой идёт "Таблица", то там тоже объекты испытаний, выделенные жирным шрифтом.

Если объекты испытаний не найдены, то вы анализируете текст вручную и добавляете варианты обработки.

Довольно быстро вы покроете абсолютное большинство вариантов.

Скрипт на чём написан? На VBA? В любом случае, добавьте к вопросу соотвествующий тег.

→ Ссылка
Автор решения: CrazyElf

Обрабатываемый вами текст состоит из:

  • Не несущего информацию текста
  • Текста с названиями объектов
  • Текста с количеством объектов

"На испытания были предоставлены заказчиком объекты испытаний" - это не несущий информации общий текст (возможно, вы его используете для нахождения таких фраз, но потом он уже не нужен). Вам нужно составить регулярку, которая будет покрывать вариации этого текста. И либо просто его сразу удалять как лишнюю информацию, либо использовать эту регулярку как часть составной регулярки, парсящей всю инфу из текста.

"в [общем] количестве 6шт." - текст о количестве. Легко ищется регуляркой.

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

Так что либо:

  • Чистка лишнего, не значащего
  • Поиск "количества"
  • Оставшееся будет наименованием, которое придётся ещё дообработать

Либо слепливаем три регулярки: <для не нужного текста><для наименования><для количества> и ищем такой регуляркой. Возможно, будут тексты, где это всё будет по-другому перемешано. Тогда и регулярки можно по-другому ставить и искать разными их сочетаниями.

→ Ссылка