LINUX.ORG.RU

Нужен совет по парсингу шаблонного текста, предоставленного в Word

 , , ,


0

1

Попросили состряпать мини-тулзу для быстрого фильтра и поиска нужной информации для областного пат.ан. отделения. Проблема в том, что исходная информация дается в формате Word (до 2003 версии) документов. Внутри - патан-протоколы. Выглядит это все на первый взгляд вполне поддающееся для парсинга (пронумерованный список с вариантами ответа), но при детальном рассмотрении вылезает одно но! А именно, некоторые варианты ответа есть «нужное подчеркнуть».
Отступлюсь. Хочу и начал писать на Java для обучения и быстроты реализации.
Так вот... для чтения этих документов начал использовать org.apache.poi. Но беглый взгляд по документации не заострил мое внимание на получении информации о свойствах текста (подчеркивание). Наверное, нужно еще раз вчитаться, но хочу спросить совета у бывалых.
Делал уже кто-нибудь подобное? Какие средства использовали? Как бы Вы поступили для реализации подобного? Что мне лучше предпринять для облегчения страданий при разборе текста?

ЗЫ. Пример.

5.Пол: мужской - 1, женский - 2, неизвестен - 3 (подчеркнуто «женский - 2»)

14.Семейное положение: состояла в зарегистрированном браке - 1, не состояла в зарегистрированном браке - 2, неизвестно – 3 (подчеркнуто «неизвестно - 3»)

★★★★★

Последнее исправление: CYB3R (всего исправлений: 1)

Я бы сперва перевёл в какой-нибудь более годный формат, а потом уже парсил. Смотрел какой-нибудь конвертер doc->html / doc->odt->html?

crutch_master ★★★★★
()

Под Java кроме POI вроде ничего и нет. Можешь использовать Windows + .NET + C# + вордовские ком-объекты. Работать будет точно.

Legioner ★★★★★
()
Ответ на: комментарий от sad_but_true1

ну так я и пытаюсь сейчас спарсить в БД. а парсить надо эти «подчеркнутые варианты». поэтому и спросил.

bvn13 ★★★★★
() автор топика

Видимо тебе нужен org.apache.poi.ss.usermodel.FontUnderline.

orm-i-auga ★★★★★
()
Ответ на: комментарий от bvn13

Ну так парсить не обязательно жабой, посмотри что умеет работать нормально с нужными тебе документами. А на жабе потом морду к БД напишешь.

sad_but_true1
()
Ответ на: комментарий от sad_but_true1

эти доки будут присылаться с определенной периодичностью, т.е. парсить в БД надо будет постоянно.

bvn13 ★★★★★
() автор топика
Ответ на: комментарий от bvn13

Cygwin. Libreoffice для винды есть. В крайнем случае можно sed/grep/perl для венды найти.

crutch_master ★★★★★
()
Ответ на: комментарий от crutch_master

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

bvn13 ★★★★★
() автор топика

Я с помощью Apache POI парсил Excel-таблицы. Помню, там были довольно богатые средства для определения стиля и размера ячейки. Наверняка что-то подобное есть и для документов Word.

CARS ★★★★
()
Последнее исправление: CARS (всего исправлений: 1)
Ответ на: комментарий от bvn13

В любом случае я бы не стал юзать doc. Мне кажется, из явы легче html будет парсить, чем ковыряться с org.apache.poi

crutch_master ★★★★★
()
Ответ на: комментарий от bvn13

Повлиять на организацию документооборота никак нельзя? Например, написать симпатичную вебморду, которая кладёт всё в БД, умеет нужные запросы и выдаёт вордовский документ, когда надо?

sad_but_true1
()
Ответ на: комментарий от crutch_master

Нашел вот такую штуку: https://poi.apache.org/apidocs/org/apache/poi/hwpf/converter/WordToHtmlConver...

Вроде бы

Converts Word files (95-2007) into HTML files.

нашел пример http://stackoverflow.com/questions/7868713/convert-word-to-html-with-apache-poi

но оно выводит лишь

<html>
<head>
<META http-equiv="Content-Type" content="text/html; charset=UTF-8">
<style type="text/css"></style>
</head>
<body class="b1"></body>
</html>

:(

bvn13 ★★★★★
() автор топика
Ответ на: комментарий от sad_but_true1

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

bvn13 ★★★★★
() автор топика
Ответ на: комментарий от bvn13

Попробуй libreoffic'om.

soffice --convert-to
Я делал, только есть одно но:
<P STYLE="margin-bottom: 0cm; line-height: 115%; page-break-before: auto; page-break-after: auto">
<FONT FACE="Times New Roman, serif"><U><B>Canon</B></U></FONT><FONT FACE="Times New Roman, serif"><U><B>-</B></U></FONT><FONT FACE="Times New Roman, serif"><U><B>checking</B></U></FONT><FONT FACE="Times New Roman, serif">:</FONT></P>
<P STYLE="margin-bottom: 0cm; line-height: 115%; page-break-before: auto; page-break-after: auto">
<A HREF="http://smf.cataclysmdda.com/index.php?topic=4160.0"><FONT COLOR="#0000ff"><FONT FACE="Times New Roman, serif"><U>http</U></FONT></FONT></A><A HREF="http://smf.cataclysmdda.com/index.php?topic=4160.0"><FONT COLOR="#0000ff"><FONT FACE="Times New Roman, serif"><U>://</U></FONT></FONT></A><A HREF="http://smf.cataclysmdda.com/index.php?topic=4160.0"><FONT COLOR="#0000ff"><FONT FACE="Times New Roman, serif"><U>smf</U></FONT></FONT></A><A HREF="http://smf.cataclysmdda.com/index.php?topic=4160.0"><FONT COLOR="#0000ff"><FONT FACE="Times New Roman, serif"><U>.</U></FONT></FONT></A><A HREF="http://smf.cataclysmdda.com/index.php?topic=4160.0"><FONT COLOR="#0000ff"><FONT FACE="Times New Roman, serif"><U>cataclysmdda</U></FONT></FONT></A><A HREF="http://smf.cataclysmdda.com/index.php?topic=4160.0"><FONT COLOR="#0000ff"><FONT FACE="Times New Roman, serif"><U>.</U></FONT></FONT></A><A HREF="http://smf.cataclysmdda.com/index.php?topic=4160.0"><FONT COLOR="#0000ff"><FONT FACE="Times New Roman, serif"><U>com</U></
FONT></FONT></A><A HREF="http://smf.cataclysmdda.com/index.php?topic=4160.0"><FONT COLOR="#0000ff"><FONT FACE="Times New Roman, serif"><U>/</U></FONT></FONT></A><A HREF="http://smf.cataclysmdda.com/index.php?topic=4160.0"><FONT COLOR="#0000ff"><FONT FACE="Times New Roman, serif"><U>index</U></FONT></FONT></A><A HREF="http://smf.cataclysmdda.com/index.php?topic=4160.0"><FONT COLOR="#0000ff"><FONT FACE="Times New Roman, serif"><U>.</U></FONT></FONT></A><A HREF="http://smf.cataclysmdda.com/index.php?topic=4160.0"><FONT COLOR="#0000ff"><FONT FACE="Times New Roman, serif"><U>php</U></FONT></FONT></A><A HREF="http://smf.cataclysmdda.com/index.php?topic=4160.0"><FONT COLOR="#0000ff"><FONT FACE="Times New Roman, serif"><U>?</U></FONT></FONT></A><A HREF="http://smf.cataclysmdda.com/index.php?topic=4160.0"><FONT COLOR="#0000ff"><FONT FACE="Times New Roman, serif"><U>topic</U></FONT></FONT></A><A HREF="http://smf.cataclysmdda.com/index.php?topic=4160.0"><FONT COLOR="#0000ff"><FONT FACE="Times New Roman, serif"><U>=4160.
0</U></FONT></FONT></A><FONT FACE="Times New Roman, serif">
</FONT><FONT FACE="Times New Roman, serif">This</FONT><FONT FACE="Times New Roman, serif">
</FONT><FONT FACE="Times New Roman, serif">is</FONT><FONT FACE="Times New Roman, serif">
</FONT><FONT FACE="Times New Roman, serif">the</FONT><FONT FACE="Times New Roman, serif">
</FONT><FONT FACE="Times New Roman, serif">canon</FONT><FONT FACE="Times New Roman, serif">
</FONT><FONT FACE="Times New Roman, serif">clearinghouse</FONT><FONT FACE="Times New Roman, serif">;
</FONT><FONT FACE="Times New Roman, serif">requests</FONT><FONT FACE="Times New Roman, serif">
</FONT><FONT FACE="Times New Roman, serif">to</FONT><FONT FACE="Times New Roman, serif">
</FONT><FONT FACE="Times New Roman, serif">change</FONT><FONT FACE="Times New Roman, serif">
</FONT><FONT FACE="Times New Roman, serif">things</FONT><FONT FACE="Times New Roman, serif">

crutch_master ★★★★★
()
Ответ на: комментарий от crutch_master

Подчеркнутое честно выделяет тегом U. Вопрос только как он поведёт себя в твоей ситуации.

crutch_master ★★★★★
()
Ответ на: комментарий от bvn13

Использовал как-то poi для xls, всё там было нормально со стилями текста (несмотря на неприличные комментарии в коде poi). Зачем лишняя сущность в виде html?

orm-i-auga ★★★★★
()
Ответ на: комментарий от crutch_master

Хотел исправить прошлое мое сообщение.

Я лажанулся при копи-пастинге. Не передал конвертеру мой документ. Сейчас смотрю выход.

<span class="s2">Пол: мужской - 1, </span><span class="s4">женский - 2, </span><span class="s2">неизвестен - 3</span>

Как-то не впечатляет.

bvn13 ★★★★★
() автор топика
Последнее исправление: bvn13 (всего исправлений: 2)
Ответ на: комментарий от orm-i-auga

Я не помню уже почему, но почему-то я не стал на жабе делать в него (doc) отчёты. Вроде бы там был глюкотрон. Excel да, не плохо работал, а вот насчёт doc я сомневаюсь, поэтому и предлагаю подобный вариант. Возможно, что оно, конечно, будет не лучше и там underline будет через параметры шрифта, но может и на оборот.

crutch_master ★★★★★
()
Ответ на: комментарий от crutch_master

попробовал. подчеркивания различить можно. но вот <ol><li></li></ol> объекты он не все адекватно распределил. некоторые «вопросы» получились разбиты на несколько <ol></ol> секций. это не есть хорошо.

bvn13 ★★★★★
() автор топика
Ответ на: комментарий от crutch_master

похожи на стандартные. но оформление у каждого отделения, которое присылает, - чуть-чуть свое. то поля, то еще что-то...

bvn13 ★★★★★
() автор топика
Ответ на: комментарий от crutch_master

надо еще попробовать поработать с самим HWPFDocument на предмет вытащить подчеркнутый текст. и, видится, придется для каждого документа-анкеты работать с двумя наборами данных: plain text и оригинальный со всем форматированием. и как-то это дело скрещивать, чтобы ответы из форматированного сопоставлять с вопросами из плэйн-текста.

bvn13 ★★★★★
() автор топика
Ответ на: комментарий от bvn13

некоторые «вопросы» получились разбиты на несколько <ol></ol> секций. это не есть хорошо.

это нормально, если будешь разбирать через poi также наткнешся на это

Deleted
()
Ответ на: комментарий от bvn13

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

Deleted
()
Ответ на: комментарий от bvn13

но оформление у каждого отделения, которое присылает, - чуть-чуть свое. то поля, то еще что-то...

Все оформление все равно порежется. В принципе можно оставить тег <u> и искать вопросы по ответам.
Например:

1. Пол 1-мужской <u>2-женский</u>
2. Образование <u>1-среднее</u> 2-высшее
Режим весь мусор и все, что в тэгах остаётся:
Пол 
мужской 
Образование 
высшее
Делаем таблицу вариантов:
Пол мужской
Пол женский
Образование среднее
Образование высшее
Вырезаем совпадающие результаты по второму столбцу, остаётся:
Пол женский
Образование среднее

crutch_master ★★★★★
()
Ответ на: комментарий от crutch_master

ну «для них» если что то открывается в текстовом процессоре, сохраняется как файл и распечатывается точно является «doc» :)

psv1967 ★★★★★
()
Ответ на: комментарий от psv1967

я представляю, как они работают, т.к. сам этим занимался.
есть файл «ШАБЛОН.doc». При каждом необходимом случае делается его копия, переименовывается, и в нем уже начинается заполнение ручками: подчеркивание, вписывание слов, где надо.

bvn13 ★★★★★
() автор топика
Последнее исправление: bvn13 (всего исправлений: 1)
Ответ на: комментарий от bvn13

вот точно также в редакторе будут отрывать и сохранять файл xforms содержимым

psv1967 ★★★★★
()
Ответ на: комментарий от crutch_master

не подскажите, где почитать про правильный обход структуры HWPFDocument? Там какие-то параграфы, ранги...

bvn13 ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.