Шаг 8: Поиск с использованием операторов
Поиск с использованием оператора OR
Для того, чтобы выполнить одновременный поиск нескольких слов, введите список слов в поле редактора выражения, отделяя их друг от друга с помощью оператора OR. Например, составьте выражение: dog or cat. Не имеет значения, написано ли слово строчными или заглавными буквами, имеются ли пробелы или разрывы строки между словом or и предшествующим или последующим словом. OR является булевским оператором и похож на оператор OR в SRL. Оператор OR выполняет поиск записей, содержащих одно из двух слов, или оба слова. Запись будет отвечать условиям запроса, если в ней присутствует только первое, только второе или оба слова.
Оператор OR может использоваться во многих ситуациях. Например, представьте, что мы хотим найти либо слово cops, либо слово police. Оба слова относятся к одному понятию (полиция). Текст записи может содержать любое из двух слов, в зависимости от стиля, используемого автором. PolyAnalyst (также, как и большинство других программных продуктов по обработке естественного языка) не может самостоятельно распознать, что оба слова (cops и police) выражают одно и то же понятие. Это типичная ситуация, в которой пользователь может прибегнуть к оператору OR. Обычно пользователей интересует именно связь идей и понятий в тексте, а не просто отдельные слова, и оператор OR - это одно из возможных средств выявления такой связи.
Попробуйте выполнить запрос gun or knife. В результате узел обнаружит 53 записи. Запись с наибольшей релевантостью содержит оба слова запроса, запись со вторым значением релевантности содержит только слово gun, следующие две записи содержат только слово knife. Четвертая по релевантности запись снова содержит оба слова из запроса.
Поиск двух слов без использования оператора
Поисковое выражение police man равнозначно запросу police AND man.
Поисковое выражение "police man" равнозначно запросу "police" AND "man". Заключение слов в кавычки позволяет вам осуществлять поиск служебных слов, которые обычно считались бы частью синтаксиса (например, and).
Помните, что выражения phrase (police,man) и police man не равнозначны. Первое выражение ищет записи, в которых искомые слова образуют словосочетание, второе - записи, в которых эти два слова встречаются в любом месте документа. Запрос police man найдет, например, следующий текст: the police spoke to the man, в то время как выражение, использующее функцию phrase, не найдет этот текст, поскольку между словами police и man имеются другие слова.
Примеры поисковых запросов с использованием некоторых PDL-функций приводятся в следующем разделе.
Поиск двух слов с использованием оператора AND
Оператор AND похож на OR. Это булевский оператор. Для того, чтобы запись отвечала условию поиска, в ней должны присутствовать оба слова. Например: police AND man. Данный запрос найдет только те записи, в которых присутствуют оба слова. Если присутствует только одно из двух слов, запись не соответствует условиям поиска. Оператор AND может использоваться с разными целями. Например, он позволяет выявить записи, в которых имеется связь между двумя понятиями. Попробуйте задать поиск gun and school. В результате получим 9 релевантных запросу записей, которые содержат оба слова.
Порядок слов не имеет значения. Запрос gun and school равнозначен запросу school and gun. Вы можете ввести слова в любом порядке.
Поиск с использованием оператора NOT
Оператор NOT позволяет исключать из результатов поиска записи, содержащие определенное слово. Используется следующий синтаксис: NOT слово. Например, если нужно найти все записи, кроме тех, которые содержат слово gun, используйте выражение: NOT gun.
Обычно оператор NOT используется для сокращения количества записей в результатах поиска вместе с оператором AND. Например: school AND NOT gun; при этом будет выполнен поиск всех записей, содержащих school, после чего будут удалены/исключены все соответствия, которые также содержат слово gun. Поиск school дает 86 записей. Поиск school and not gun дает только 77 записей. 9 записей исключаются из результата.
Использование нескольких операторов
Как показано выше, в поисковом запросе можно использовать несколько булевских операторов. Например, можно задать поиск gun or knife or shotgun or weapon or handgun. Этот запрос выявит 107 релевантных записей, т.е. все записи, содержащие каждое из этих слов. Мы могли бы выполнить более сложный поиск, например, gun and school or house, который найдет 43 записи. У некоторых внимательных пользователей сразу может возникнуть вопрос: не совсем ясно, должно ли слово house присутствовать в записи для того, чтобы запись соответствовала нашему запросу. Чтобы это понять, необходимо знать, как PolyAnalyst оценивает поисковые запросы.
Приоритет операторов и круглые скобки
PolyAnalyst рассматривает поисковые запросы слева направо. Также необходимо помнить о том, что некоторые булевые операторы имеют приоритет над другими. Операторы оцениваются в следующем порядке: сначала NOT, затем AND, затем OR. В запросе gun and school or house оператор AND относится только к первой части запроса, gun and school. Данный запрос означает, что сначала алгоритм ищет gun and school, затем house, а затем найденные записи объединяются. Чтобы лучше понять это, попробуйте задать поиск gun or school and house, при этом будут найдены 35 записей вместо предыдущего результата (43 записи). Это происходит потому, что PolyAnalyst всегда в первую очередь оценивает оператор AND, и только потом OR. Следовательно, данный запрос сначала ищет school and house, затем gun, а потом объединяет все записи. Записей, где присутствуют слова house и school больше по сравнению с записями со словами gun и school (35 меньше 43).
Для того, чтобы сделать запрос более прозрачным, т.е. чтобы пользователь мог с первого взгляда определить, в каком порядке будут рассматриваться его фрагменты, можно использовать круглые скобки. Например, если учитывать, что оператор AND имеет приоритет по отношению к оператору OR, очевидно, что в запросе gun and school or house в круглых скобах нет никакой практической необходимости. Однако их добавление сделает выражение более понятным для пользователя. Запрос (gun and school) or house найдет то же количество записей на основе той же логики, но визуально он более понятен пользователю.
PolyAnalyst всегда оценивает то, что находится в круглых скобках, в первую очередь, прежде чем приступить к тому, что находится за их пределами. Круглые скобки имеют больший приоритет по сравнению с операторами. Мы могли бы переписать запрос следующим образом, сдвинув круглые скобки: gun and (school or house). Этот поисковый запрос выдает только 11 релевантных записей, в отличие от запроса без скобок, который нашел 43 записи. Это происходит потому, что PolyAnalyst сначала оценивает то, что находится внутри круглых скобок, слова house и school, разделенные булевским оператором OR. Сначала PolyAnalyst собирает все записи, в которых имеется одно из слов, заключенных в скобки, а затем из этих записей оставляет только те, которые также содержат слово gun. Расположение круглых скобок важно потому, что оно может полностью изменить значение и логику поискового запроса.