Рута, определите шаблон и верните его часть - PullRequest
1 голос
/ 24 октября 2019

Я работаю над базовым скриптом рута. Моя цель - определить скороговорку, скажем, сумму в валюте, но вернуть только ее числовое значение. Например, текст может быть «Я заплатил 54 доллара США за мою новую обувь». Я хочу идентифицировать «USD54», чтобы быть уверенным, что это денежная величина, а не количество, но я хочу получить только «54» из своего сценария, чтобы в своем последующем приложении я мог использовать его как число.

Весь мой сценарий как структура, подобная приведенной ниже, это нормально, но возвращает 54 доллара, а не только 54.

PACKAGE uima.ruta.example;
DECLARE VarA;
DECLARE VarB;

// 2 capital letters and any number of digits
// Example USD5 , USD6700
// 
CAP{REGEXP("USD") -> MARK(VarA)}
NUM{ -> MARK(VarB),MARK(EntityType,1,2)};

Есть идеи, как решить эту проблему?

Приветствия.

1 Ответ

0 голосов
/ 04 ноября 2019

Учитывая описанный сценарий, вы хотели бы получить в качестве выходного символа валюты (например, USD) и сумму (например, 54) в виде целого числа. В Руте вы можете использовать эту структуру как отдельную аннотацию Currency с функциями symbol и amount:

DECLARE Currency (STRING symbol, INT amount);
INT value;
(s:W{REGEXP("USD", true)} NUM{PARSE(value)}){-> CREATE(Currency, "symbol"=s.ct, "amount"=value)};

Поскольку 54 является аннотацией NUM, ее необходимо проанализироватьдо INT и сохраняется как переменная value. Точно так же, чтобы получить строковое значение аннотации символа W, мы передаем покрытый текст (т.е. s.ct) W, на который ссылается метка s.

Теперь вы можете получить доступ к функциям без каких-либо манипуляций со строками в последующем приложении.

...