1

我需要用 Lucene 索引一些 xml 文档,但在此之前,我需要解析这些 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 标签内的文本。目标是查询被索引的文本并知道每次命中哪个时间戳间隙。

例如,如果我查询单词“Text”,输出应该是这样的:“2 hits, 00:11.76-00:16.04, 00:18.52-00:22.88”

我开始用 Lucene 索引整个 XML。现在我想解析文件,但我不确定解决这个问题的最佳近似值是什么。

欢迎任何帮助或建议:) 谢谢大家!

4

2 回答 2

3

我强烈建议您将所有 XML 存储在一个eXist数据库中,该数据库内置了 Lucene。我已经使用这个组合几个月了,它很容易解决了很多搜索和检索问题。

于 2011-06-20T12:22:36.613 回答
3

我使用了SAX 库(即 org.xml.sax.helpers.DefaultHandler 的子类)来解析 XML 文件,从每个 XML 文档中提取所需的信息到我自己的 Document 类中,然后索引该 Document 实例。(间接是由于必须单独解析多种文档格式,但在同一个索引中编制索引。)在您的情况下,如果每个 <body> 元素的内容代表一个逻辑文档,您可以存储日期作为与特定令牌相关联的有效负载的信息。将 XML 解析到 <p> 级别,枚举段落实例,并为每个实例添加一个具有相同名称的新 Field 实例,其中值是文本,有效负载是日期信息,适当表示。(有效负载是二进制的,因此,例如,您可以存储与开始时间和结束时间相对应的两个长值。

如果您不需要将每个元素的内容作为单个文档,则可以将每个 <p> 视为单独的文档,然后在其上设置有效负载。或者,您可以将日期存储为单独的字段。

于 2011-06-20T21:30:44.363 回答