使用Python搜索XML数据的全文:最佳实践,优点和缺点

lec*_*tif 13 python xml search xpath full-text-search

任务

我想使用Python来对XML数据进行全文搜索.

示例数据

<elements>
  <elem id="1">some element</elem>
  <elem id="2">some other element</elem>
  <elem id="3">some element
    <nested id="1">
    other nested element
    </nested>
  </elem>
</elements>
Run Code Online (Sandbox Code Playgroud)

基本功能

我想要的最基本的功能是在XPath中搜索"other"("/ elements/elem")至少返回匹配元素(elem 2)的ID属性值和嵌套元素(elem 3,嵌套) 1)或匹配的XPath.

理想的功能

解决方案应该灵活且可扩展.我正在寻找这些功能的可能组合:

  • 搜索嵌套元素(无限深度)
  • 搜索属性
  • 搜索句子和段落
  • 使用通配符搜索
  • 使用模糊匹配进行搜索
  • 返回精确匹配信息
  • 大型XML文件的良好搜索速度

我不希望有一个具有所有理想功能的解决方案,我必须结合不同的现有功能并自己编写代码.但首先我想更多地了解那里有什么,你通常会使用哪些库和方法,它们的优点和缺点是什么.

编辑:感谢您的答案到目前为止,我添加了细节并开始了赏金.

Ste*_*ven 6

不确定这是否足以满足您的需求,但lxml支持xpath中的正则表达式(意思是:您可以使用xpath 1.0加上正则表达式EXSLT扩展函数)

与稍后添加的功能列表相比:

  • 搜索嵌套元素(无限深度):是的
  • 搜索属性:是的
  • 搜索句子和段落:没有.假设"paragraph"是实际的xml元素,那么是的.但"句子"就是这样,没有.
  • 使用通配符搜索:是(正则表达式)
  • 使用模糊匹配搜索:否(假设词干,同义词等...)
  • 返回精确匹配信息:是的
  • 大型XML文件的良好搜索速度:是的,除非您的文件非常大,否则您实际上需要全文索引才能获得良好的速度.

满足我所看到的所有请求的唯一方法是将文件加载到支持"真实"全文搜索的本机xml数据库(可能通过XQuery Fulltext)并使用它.(不能帮助你更进一步,也许Sedna,似乎有一个python API,似乎支持全文搜索?)