У меня большой 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, чтобы решить эту проблему, но предпочитаю, если это возможно.
Спасибо, что нашли время прочитать мой вопрос и подумали, чтобы помочь.