intersect

Назначение

Находит документы, содержащие употребления первого аргумента, которые пересекаются с употреблениями второго аргумента.

Синтаксис

intersect(аргумент_1, аргумент_2)

Аргументы

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

Значение

Пояснение

first

первый аргумент целиком (значение по умолчанию)

second

второй аргумент целиком

intersection

пересечение аргументов

union

объединение аргументов

difference

симметрическая разность (все элементы первого и второго множества, кроме пересекающихся элементов)

difference_left

разность первый/второй

difference_right

разность второй/первый

Кроме того, функция поддерживает опциональный именованный параметр diff, который задает ограничение на различие аргументов (в количестве слов). Т.е. diff — это разница между количеством всех подкрашенных слов у пересекающихся аргументов и количеством общих для них слов. Можно указать два параметра diff определяющих верхнюю и нижнюю границу разницы аргументов.

Чтобы ограничить запрос, можно использовать операторы :=, :>, :>=, :<, :<=.

Возвращаемое значение

Документы, соответствующие запросу.

Примеры

intersect("a b b", "b", match:=first) находит «a b b» в «a b b».

intersect("a b b", "b", match:=second) находит «b b» в «a b b».

intersect("a b b", "b", match:=difference) находит «a» в «a b b», т.е. вычтет из первого аргумента все вторые аргументы.

intersect("b", "a b b", match:=intersection) находит «b» и «b» как два результата (первый аргумент дважды пересекается со вторым).

intersect("a b b", "b", match:=union) находит «a b b» в «a b b».

intersect("a b b", "b", match:=difference_left) находит «a» в «a b b».

intersect("a b b", "b c", match:=difference_right) находит «c» в «a b b c».

intersect(entity(Organizations), "государственный педагогический университет", diff:=0) находит организации, равные (с точностью до пунктуации) фразе «государственный педагогический университет».

intersect(entity(Organizations), «государственный педагогический университет», diff:<=1) находит организации, отличающиеся от «государственный педагогический университет» не более чем на одно слово, например, «Сахалинский государственный университет».

intersect(entity(Organizations), «государственный педагогический университет», diff:>=1, diff:<=4) находит организации, отличающиеся от «государственный педагогический университет» от одного до четырех слов, например, «Башкирский государственный педагогический университет» или «Башкирский государственный педагогический университет имени М. Акмуллы».

Примечание
  • Если позиции второго аргумента пересекаются с первым аргументом, то они объединяются. Например, intersect("a b b", "b", match:=intersection) находит «b b» во фразе «a b b» как одно вхождение.

  • Функция синонимична оператору &, но у последнего есть два алгоритма работы. Когда пересекаются сложные аргументы, например функции и переменные, оператор & рассматривает позиции аргументов. А в случае с простыми словами и фразами в кавычках оператор & рассматривает множества. Тогда пересечением считается только полное совпадение аргументов. Пересечение множеств выполняется быстрее, чем пересечение позиций, его удобно использовать при работе со словарями или списками слов.

Примеры

"a b"&"a b" находит "a b".

"a b"&"a" ничего не находит, потому что элементы двух множеств не совпадают.

intersect("a b", "a") находит "a b", потому что позиция "a" пересекает позиции "a b".

intersect(term(class_1), term(class_2)) = term(class_1)&term(class_2) находит совпадающие слова и фразы из списков "class_1" и "class_2".