Я пишу стеммер Портера в xQuery, и в качестве первого шага мне нужно сопоставить шаблоны согласных и гласных. Последовательность соответствия согласных из примера Perl, которую я использую в качестве основы для этого, — (?:[^aiueoy]|(?:(?<=[aiueo])y)|\by)
, а последовательность гласных — (?:[aiueo]|(?:(?<![aiueo])y))
. Мне нужно расширить это, чтобы также включить букву aesc (æ), и вот что у меня есть для моего регулярного выражения xquery:
let $v := element {"vowels"} {matches($f,"(?:([^aiueoy])|(?:(?:[aiueo]\1)y))")}
let $c := element {"consonants"} {matches($f,"(?:([aiueo])|(?:(?<![aiueo]\1)y))")}
Пример типа XML, который я ищу, выглядит следующим образом:
<entry ref="173">
<headword>abǒve</headword>
<headword>abǒven</headword>
<variant>abufe</variant>
<variant>abufen</variant>
<variant>abuue</variant>
<variant>abuuen</variant>
<variant>abowve</variant>
<variant>obove</variant>
<variant>oboven</variant>
<variant>obufe</variant>
<variant>obufen</variant>
<variant>abof</variant>
<variant>obof</variant>
<variant>aboyf</variant>
<variant>aboun</variant>
<variant>aboune</variant>
<variant>abown</variant>
<variant>abowne</variant>
<variant>aboon</variant>
<variant>oboun</variant>
<variant>oboune</variant>
<variant>abow</variant>
<variant>aboʒe</variant>
<part_of_speech> adv. </part_of_speech>
</entry>
Однако, запустив это в Saxon, я получаю следующую ошибку: Query failed with dynamic error: Syntax error at char 17 in regular expression: No expression before quantifier
Я почти уверен, что моя проблема в том, что я неправильно строю положительное ретроспективное представление, изменив его с <=
на \1
, но я не уверен, как мне это сделать. создайте этот аспект таким образом, чтобы он работал с xQuery. Любые предложения будут высоко ценится.
\1
, не могли бы вы добавить ожидаемый вывод XML? Также я думаю, что вы инвертировали гласные и согласные в своем коде XQuery, иначе я также не понимаю, почему вы хотите сопоставить[aiueo]
как согласные и[^aiueo]
как гласные - person Aaron   schedule 28.09.2018