gpt4 book ai didi

java - 使用嵌套循环并返回多个值来解析 XML

转载 作者:行者123 更新时间:2023-11-30 09:48:03 25 4
gpt4 key购买 nike

我有一个具有以下结构的大型 XML 文件:

<brain>
<q>
<question> What are your hobbies? </question>
<question> What do you do for sake of fun? </question>
<question> How do you spend your spare time? </question>
<question> What are your interests? </question>
<question> What do you enjoy most? </question>
<answer> I like [personal_info/hobby] </answer>
<answer>[personal_info/hobby]</answer>
<answer>I enjoy [personal_info/hobby] </answer>
</q>

<q>
<question> Where do you live? </question>
<question> What city do you live in? </question>
<question> Where are you from? </question>
<question> Where are you living? </question>
<question> Where is your residence? </question>
<answer> I live at [personal_info/loc] </answer>
<answer> I am living in [personal_info/loc]</answer>
<answer> At [personal_info/loc]</answer>
<answer> [personal_info/loc]</answer>
</q>
.
.
.
</brain>

您可能已经猜到,它是聊天机器人的数据库。这个想法是,用户将输入一个问题(或与此相关的任何句子),我们基于 java 的聊天机器人将对该文件运行 XQuery。我正在使用的 XQuery 实现(称为 nux)提供了句子相似度的模糊匹配,因此将返回部分匹配的句子。下面是一些代码来说明这一点:

Nodes results = XQueryUtil.xquery(doc, "declare namespace lucene = \"java:nux.xom.pool.FullTextUtil\"; "
+ "for $q in /brain/q "
+ " for $question in $q/question"
+ " let $score := lucene:match($question, \"How are you\") "
+ " where $score > 0.1 "
+ " order by $score descending "
+ "return $q/answer");

这段代码应该遍历每个 brain/q然后 q/question如果其相似度得分大于 0.1,则应返回 <answer>里面有 <q> .问题是它返回所有答案标签。例如,如果 "What are your hobbies?"被询问,它应该返回

  <answer> I like [personal_info/hobby] </answer>
<answer>[personal_info/hobby]</answer>
<answer>I enjoy [personal_info/hobby] </answer>

但返回文件中找到的所有答案标签。它还会一次又一次地重复它们,次数不可预测。

你能帮我解决这个问题吗?

数据集是通过运行各种脚本生成的,由我收集并手动检查。如有必要,我可以更改 XML 的结构来解决此问题,但如果可能的话,我宁愿不这样做。

感谢您花时间阅读我的问题并考虑提供帮助。

最佳答案

我从 Lucene(或实际上是 Solr)的经验中知道;很快就达到了 0.1 的相似度分数。这可以解释为什么返回文件中的所有答案。

在我使用 Solr 的搜索系统中,我使用大约 0.4~0.6 的边界(取决于搜索的字段)。

您可以尝试显示每个问题的返回分数(如果 XQueryUtil 允许的话);看看有多少正确的匹配你想要匹配的行。这样您就可以选择一个好的/更好的边界。

另一种方法是尝试使用一些更高的值,看看您得到的答案是否更少,然后尝试通过反复试验找到正确的值。

关于java - 使用嵌套循环并返回多个值来解析 XML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6422093/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com