任务
我想使用 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>
基本功能
我想要的最基本的功能是在 XPath(“/elements/elem”)中搜索“other”至少匹配元素的 ID 属性值(elem 2) 和嵌套元素 (elem 3, nested 1) 或匹配的 XPath。
理想的功能
解决方案应该灵活且可扩展。我正在寻找这些功能的可能组合:
- 搜索嵌套元素(无限深度)
- 搜索属性
- 搜索句子和段落
- 使用通配符搜索
- 使用模糊匹配进行搜索
- 返回精准匹配信息
- 大型 XML 文件的良好搜索速度
问题
我不期望一个具有所有理想功能的解决方案,我必须结合不同的现有功能并自己编写其余部分。但首先,我想更多地了解那里有什么,您通常会使用哪些库和方法,它们的优缺点是什么。
编辑:感谢到目前为止的回答,我添加了详细信息并开始赏金。
最佳答案
不确定这是否足以满足您的需求,但是 lxml支持 regular expressions in xpath (意思是:你可以使用 xpath 1.0 加上 EXSLT extension functions for regular expressions )
与后来添加的功能列表相比:
- 搜索嵌套元素(无限深度):是
- 搜索属性:是
- 搜索句子和段落:没有。假设“段落”是实际的 xml 元素,那么是的。但是“句子”本身,不是。
- 使用通配符搜索:是(正则表达式)
- 使用模糊匹配进行搜索:否(假设使用词干提取、同义词等...)
- 返回精准匹配信息:是
- 大型 XML 文件的良好搜索速度:是的,除非您的文件非常大,以至于您实际上需要全文索引才能获得良好的速度。
我看到满足您所有请求的唯一方法是将您的文件加载到支持“真正的”全文搜索(可能通过 XQuery Fulltext)的 native xml 数据库中并使用它。 (不能进一步帮助你,也许 Sedna ,它似乎有一个 python API 并且似乎支持全文搜索?)
关于python - 使用 Python : best practices, 优缺点全文搜索 XML 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5790943/