【发布时间】:2017-06-18 17:04:37
【问题描述】:
我从未处理过 XML 数据库(或以复杂形式查询 XML),所以这个 xquery 对我来说是全新的。我读过 Datypic 的书,我最初尝试将 XML 解析为数据库,但标签有意义,关系数据库增加了更多复杂性。
我有一些文件,其中包含文字记录和所用单词的详细信息,结构如下:
<text id="KBY">
<bncDoc xml:id="KBY">
<stext type="CONVRSN">
<u who="KBYPSUNK">
<w tag="UH" hw="hi" pos="INTERJ" sem="Z4" semo="|Z4|">Hi</w>
<w tag="YEX" hw="PUNC" pos="STOP" sem="" semo="|">!</w>
</u>
<u who="PS10L">
<w tag="VVGK" hw="going" pos="VERB" sem="T1:1:3" semo="|T1:1:3|">Gon</w>
<w tag="TO" hw="to" pos="PREP" sem="Z5" semo="|Z5|">na</w>
<w tag="RR21" hw="at" pos="ADV" sem="A13:7" semo="|A13:7;i1:2:1|">at</w>
<w tag="RR22" hw="least" pos="ADV" sem="A13:7" semo="|A13:7;i1:2:2|A13:7|">least</w>
<w tag="VVI" hw="stop" pos="VERB" sem="T2" semo="|T2d|S8d|M8|H4|A1:1:1|">stop</w>
<w tag="II" hw="at" pos="PREP" sem="Z5" semo="|Z5|">at</w>
<w tag="NP1" hw="gerald" pos="SUBST" sem="Z1" semo="|Z1m|">Gerald</w>
<w tag="GE" hw="'s" pos="UNC" sem="Z5" semo="|Z5|">'s</w>
<w tag="VHZ" hw="have" pos="VERB" sem="Z5" semo="|Z5|A9u|A2:2|S4|">has</w>
<w tag="XX" hw="not" pos="ADV" sem="Z6" semo="|Z6|">n't</w>
<w tag="PPHS1" hw="he" pos="PRON" sem="Z8" semo="|Z8m|">he</w>
<w tag="YQUE" hw="PUNC" pos="STOP" sem="" semo="|">?</w>
</u>
简单地说,我知道我可以使用以下方法查询单个单词:
for $w in //w
where $w = "houses"
return $w
OR
for $w in //w//text()
where $w = "houses"
return $w
但我终其一生都无法弄清楚如何查询多个词。 IE。 “有三间房子”。这将涉及检查每个单词是否相邻并且不在单独的u 标记中。理想情况下,我也可以在前后抓住几句话。到目前为止,我认为由于结构原因这很困难,但搜索普通文件需要 6 秒以上,而 BaseX 似乎对此非常有效。
感谢任何帮助!
【问题讨论】:
-
您是否考虑将示例“有三间房屋”更改为示例 XML 中出现的短语?另外,您能否澄清一下您是在尝试搜索文本节点还是
@hw中的规范化单词?最后,您能否链接到有关这种格式的任何信息 - 可以解释许多属性的东西? (或者如果它们不重要,也许最好将它们从您的样本中去除,从而提高信噪比。)对我来说奇怪的是,<w>元素之间没有关于空白的明确信息 - 重要搜索文本时。 -
另外,您能否将示例文本编辑为格式正确的 XML?
-
我回家后会这样做,感谢您的反馈。这个 xml 结构是由非技术人员创建的,我受此约束。我已经为它创建了一个模式,但我同意它很难解析。我能够处理空白的唯一方法是在
pos属性上使用规则,但我知道这并不理想。