Поиск чисел

Для поиска чисел используется функция number().

Синтаксис

number([тип_ограничения, аргумент_1, [аргумент_2]])

Для функции number() нет обязательных аргументов — при их отсутствии функция найдет все числа.

Пример

number() найдет все числа («10», «-0.2», «первый», «миллиард» и т.д.)

phrase(number(), "%" or процент) найдет «10%», «двадцать процентов», «-9.6%» и т.д.

Аргументы тип_ограничения, аргумент_1 и аргумент_2 являются опциональными и позволяют искать числа в определенном диапазоне. Аргумент тип ограничения принимает одно из следующих значений:

Тип ограничения

Синонимы

Пояснение

<

less/lt

число должно быть меньше значения аргумент_1

<=

le/less or equal

число должно быть меньше или равно значению аргумент_1

>

gt/greater

число должно быть больше значения аргумент_1

>=

ge/greater or equal

число должно быть больше или равно значению аргумент_1

=

eq/equal

число должно быть равно значению аргумент_1

!=

ne/not equal

число не должно быть равно значению аргумент_1

()

bt/between

число должно принадлежать интервалу (аргумент_1, аргумент_2)

[]

be/between or equal

число должно принадлежать интервалу [аргумент_1, аргумент_2]

(]

lo/left-open

число должно принадлежать интервалу (аргумент_1, аргумент_2]

[)

ro/right-open

число должно принадлежать интервалу [аргумент_1, аргумент_2)

Если тип ограничения записан математическими символами (см. первый столбец: >, (), !=, и т.д.), его необходимо заключить в кавычки. Если аргументы аргумент_1 или аргумент_2 принимают отрицательное значение, их также необходимо заключить в кавычки.

Пример

number(greater, 10) = number(gt, 10) = number(">", 10) найдет числа больше 10 («10.2», «500», «тысяча» и т.д.)

number(less, "-3") = number(lt, "-3") = number("<", "-3") найдет числа меньше -3 («-3.3», «-50», «минус пять» и т.д.)

number(between, 2008, 2017) найдет числа в интервале (2008; 2017) («2008», «2011», «2017» и т.д.)

Функция также поддерживает опциональный именованный параметр allow_multiword. Если данная опция включена, составные числительные (сто пятьдесят, две тысячи триста двадцать) трактуются как единое целое и корректно преобразуются в число. Использование данной опции может привести к снижению скорости обработки запроса. По умолчанию опция выключена (allow_multiword:=no).

Пример

number(greater_equal, 100) найдет «100» в предложении «Повестки получили уже более 100 тысяч человек», так как по умолчанию составные числительные не воспринимаются функцией как единое целое.

number(greater_equal, 100, allow_multiword:=yes) найдет «100 тысяч» в предложении «Повестки получили уже более 100 тысяч человек», так как включение опции allow_multiword позволяет находить составные числительные.

Чтобы найти целые числа, дроби или числа, записанные словами, можно использовать опциональный именованный параметр type, который может принимать следующие значения:

Значение

Пояснение

numeral

числа в любом написании (например, 125, 713.446.9307, 1-ый и т.д.)

digit

числа, состоящие только из цифр (без запятых, точек, слешей и т.д.)

word

числа, записанные словами

any

числа, записанные как словами, так и цифрами (включая дроби)

Чтобы перечислить несколько возможных типов числовой записи, их следует записать через «|», например, type:=digit|word.

Пример

number(greater, 2, type:=word) найдет «третий», «шесть», «сорок», и т.д.

number(greater, 100, type:=word, allow_multiword:=yes) найдет «тысяча», «две тысячи», «миллион двести тысяч», и т.д.

number(greater, 2, type:=digit) найдет «42», «5», и т.д.

number(greater, 2, type:=numeral) найдет «2.3», «5,5», «3», и т.д.

number(greater, 2, type:=any) найдет «три», «3», «2.3», и т.д.

number(greater, 2, type:=digit|word) найдет «три», «3», «4», «сорок», и т.д.

Примечание

Функция number() ищет числа, записанные как цифрами, так и прописью.

Для поиска чисел, записанных только цифрами, можно также использовать запрос char(numeral, number()) или char(digit, number()).

Для поиска чисел, записанных только прописью, можно также использовать запрос char(alpha, number()).

Подробнее о функции char() см. в разделе «Поиск пунктуации и специальных символов».

Пример

char(alpha, number(">=", 10)) найдет «двадцати», «пятьдесят», «десятки миллиардов» и т.д.