XML-парсер + индексирование данных - PullRequest
1 голос
/ 20 июня 2011

Мне нужно проиндексировать некоторые XML-документы с помощью Lucene, но перед этим мне нужно проанализировать эти XML и извлечь некоторую информацию из их тегов.

XML выглядит следующим образом:

<?xml version="1.0" encoding="UTF-8"?>
<tt xml:lang="es" xmlns="http://www.w3.org/2006/04/ttaf1"  xmlns:tts="http://www.w3.org/2006/04/ttaf1#styling">
  <head>
        <styling>
            <style id="bl" tts:fontWeight="bold" tts:color="#FFFFFF" tts:fontSize="15" tts:fontFamily="sansSerif"/>
       </styling>
  </head>

  <body>
    <div xml:lang="es">
            <p begin="00:00.50" end="00:04.02" style="bl">Info</p>
            <p begin="00:04.32" end="00:07.68" style="bl">Different words,<br />and phrases to index</p>
            <p begin="00:11.76" end="00:16.04" style="bl">Text</p>
            <p begin="00:18.52" end="00:22.88" style="bl">More and<br />more text</p>
   </div>
  </body>
</tt>

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

Например, если я запрашиваю слово «Текст», вывод должен сказать что-то вроде: «2 совпадения, 00: 11.7600: 16.04, 00: 18.52-00: 22.88 "

Я начал индексировать весь XML с помощью Lucene.Теперь я хочу проанализировать файл, но я не уверен, что является наилучшим приближением для решения этой проблемы.

Любая помощь или совет приветствуются :) Спасибо всем!

Ответы [ 2 ]

3 голосов
/ 21 июня 2011

Я использовал библиотеку SAX (то есть подкласс org.xml.sax.helpers.DefaultHandler) для анализа файлов XML, извлек необходимую информацию из каждого документа XML в мой собственный класс Document и затем проиндексировал этот экземпляр документа. (Это было связано с наличием нескольких форматов документов, которые должны были быть проанализированы отдельно, но проиндексированы в одном и том же индексе.) В вашем случае, если содержимое каждого из ваших элементов представляет логический документ, вы можете сохранить дату информация как полезные данные, связанные с определенными токенами. Выполните синтаксический анализ XML до уровня

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

Если вам не нужно содержимое каждого элемента как одного документа, вы можете обработать каждый

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

3 голосов
/ 20 июня 2011

Я настоятельно рекомендую хранить все ваши XML в базе данных eXist , которая имеет встроенную Lucene .Я использую эту комбинацию уже несколько месяцев, и она довольно легко решает многие проблемы поиска и поиска.

...