Разделение сложных файлов PDF с помощью службы преобразования документов Watson
Мы внедряем систему вопросов и ответов, используя Watson Discovery Service(WDS). Нам потребовался каждый блок ответа, доступный в одном документе. У нас есть сложные файлы PDF как корпус. PDF-файлы содержат два столбца данных, таблиц и изображений. Вместо того, чтобы принимать целые PDF-файлы как корпус для WDS и использовать отрывочный поиск, мы используем Watson Document Conversion Service(WDC), чтобы разбить каждый PDF-файл на блоки ответов, а позже мы принимаем эти блоки ответов на WDS.
У нас есть две проблемы со службой преобразования документов Watson для сложного разделения PDF.
- Мы ожидаем, что каждый заголовок является заголовком, а соответствующий текст - данными (ответом). Однако он разбивает каждую главу на единицу ответа. Есть ли способ разделить двухколоночный документ по заголовку?
- Если входной PDF-файл содержит таблицу, служба преобразования документов считывает структурированные данные, доступные в PDF-файле, в виде простого текста (отсутствует форматирование таблицы). Есть ли способ прочитать структурированные данные из PDF, чтобы ответить на блок?
1 ответ
Я бы порекомендовал вам сначала преобразовать PDF в нормализованный HTML, используя этот параметр:
"conversion_target": "normalized_html"
и проверить сгенерированный HTML. Ищите места, где заголовки (<h1>, <h2>, ..., <h6>
) обнаружены. Это теги, которые будут использоваться для разделения на единицы ответа при переключении обратно на answer_units
, Причина, по которой вы в настоящее время видите, что каждая глава разбита как единица ответа, заключается в том, что каждая глава, вероятно, начинается с заголовка, но внутри каждой главы заголовки не обнаруживаются.
Чтобы сгенерировать больше блоков ответов, вам нужно настроить входные конфигурации PDF, как описано здесь, чтобы с шага преобразования PDF в HTML генерировалось больше заголовков и, следовательно, генерировалось больше блоков ответов.
Например, следующая конфигурация будет определять заголовки на 6 различных уровнях на основе определенных характеристик шрифта для каждого уровня:
{
"conversion_target": "normalized_html",
"pdf": {
"heading": {
"fonts": [
{"level": 1, "min_size": 24},
{"level": 2, "min_size": 18, "max_size": 23, "bold": true},
{"level": 3, "min_size": 14, "max_size": 17, "italic": false},
{"level": 4, "min_size": 12, "max_size": 13, "name": "Times New Roman"},
{"level": 5, "min_size": 10, "max_size": 12, "bold": true},
{"level": 6, "min_size": 9, "max_size": 10, "bold": true}
]
}
}
}
Вы можете начать с конфигурации, подобной этой, и продолжать изменять ее до тех пор, пока созданный нормализованный HTML-код не будет содержать заголовки в тех местах, которые, как вы ожидаете, будут в единицах ответа. Затем возьмите настроенную конфигурацию, переключитесь на answer_units
и собрать все это вместе:
{
"conversion_target": "answer_units",
"answer_units": {
"selector_tags": ["h1", "h2", "h3", "h4", "h5", "h6"]
},
"pdf": {
"heading": {
"fonts": [
{"level": 1, "min_size": 24},
{"level": 2, "min_size": 18, "max_size": 23, "bold": true},
{"level": 3, "min_size": 14, "max_size": 17, "italic": false},
{"level": 4, "min_size": 12, "max_size": 13, "name": "Times New Roman"},
{"level": 5, "min_size": 10, "max_size": 12, "bold": true},
{"level": 6, "min_size": 9, "max_size": 10, "bold": true}
]
}
}
}
Что касается вашего второго вопроса о таблицах, к сожалению, нет способа преобразовать содержимое таблицы в единицы ответа. Как объяснено выше, генерация блока ответа основана на обнаружении курса. При этом, если между двумя обнаруженными заголовками есть таблица, эта таблица будет частью блока ответа, как и любое другое содержимое между двумя заголовками.