Как достать из текста интересующую информацию?
Доброго времени суток обитатели сего ресурса. Столкнулся на работе со следующей проблемой: Я написал скрипт, который достает текст из вордовских файлов и считывает определённые данные для добавления их в строку таблицы. Если с номером протокола, заказа, названия протокола, даты выпуска проблем не возникло, то вот с определением объекта испытания и методики проведения испытания есть определенные проблемы. Дело в том, что эти данные находятся в смешанном виде с другим текстом, а их расположение может быть произвольным, поэтому достать эти данные с помощью регулярных выражений представляется довольно сложным или вообще невозможным. Примеры(объекты испытаний выделены жирным шрифтом):
На испытания были предоставлены фиксаторы тормозных трубок в количестве 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 шт):
Делайте обработку исходя из имеющихся данных. На данный момент я вижу следующее:
- Ключевая фраза "На испытания были предоставлены".
- Объект испытаний выделен жирным шрифтом в том же абзаце.
- Если после абзаца с ключевой фразой идёт "Таблица", то там тоже объекты испытаний, выделенные жирным шрифтом.
Если объекты испытаний не найдены, то вы анализируете текст вручную и добавляете варианты обработки.
Довольно быстро вы покроете абсолютное большинство вариантов.
Скрипт на чём написан? На VBA? В любом случае, добавьте к вопросу соотвествующий тег.
Обрабатываемый вами текст состоит из:
- Не несущего информацию текста
- Текста с названиями объектов
- Текста с количеством объектов
"На испытания были предоставлены заказчиком объекты испытаний" - это не несущий информации общий текст (возможно, вы его используете для нахождения таких фраз, но потом он уже не нужен). Вам нужно составить регулярку, которая будет покрывать вариации этого текста. И либо просто его сразу удалять как лишнюю информацию, либо использовать эту регулярку как часть составной регулярки, парсящей всю инфу из текста.
"в [общем] количестве 6шт." - текст о количестве. Легко ищется регуляркой.
Ну и остаётся то, что между не значащей инфой и количеством. Там уже нужно тоже подбирать регулярки, потихоньку разбирая все случаи. Волшебных способов нет, обычно именно подбором регулярок постепенно всё разбирают, насколько я понимаю.
Так что либо:
- Чистка лишнего, не значащего
- Поиск "количества"
- Оставшееся будет наименованием, которое придётся ещё дообработать
Либо слепливаем три регулярки: <для не нужного текста><для наименования><для количества> и ищем такой регуляркой. Возможно, будут тексты, где это всё будет по-другому перемешано. Тогда и регулярки можно по-другому ставить и искать разными их сочетаниями.