Поиск русских статей

Поиск русских статей

Поиск русских статей

Ссылки



=== Скачать файл ===




















Важной функцией на сайте является поиск по разделу или по всему сайту. Это позволяет пользователю быстро найти необходимую информацию. Чаще всего этот вопрос решается с помощью полнотекстового поиска или поиска по базе через выражение LIKE. Полнотекстовый поиск удобен тем, что перекладывает вопрос ранжирования страниц по релевантности на СУБД, позволяет искать фразы. Но вместе с тем накладывает некоторые ограничения, в частности, заставляет использовать таблицы типа MyISAM, не осуществляет поиск слов, короче 4-ех символов, создает дополнительные индексы. Поиск через выражение LIKE менее удобен для разработчика, так как работает медленнее, осложняет поиск фраз. Общим недостатком обоих подходов является невозможность морфологического поиска. Например, в каталоге товаров присутствет товар 'Букет из желтых роз', при поиске по фразе 'красные розы' пользователь не увидит этот товар в результатах. А хотелось бы, чтобы машина хоть немного понимала естественный язык. Решить эту проблему несложно на PHP и в этом нам поможет phpMorphy. Русский, Английский, Немецкий AOT. Украинский, Эстонский на основе ispell. Есть возможность добавить поддержку других языков при помощи myspell словаря. Словари можно взять здесь http: Выбирайте в зависимости от версии библиотеки и кодировки. Следует учесть что использование этой библиотеки создаст некоторую дополнительную нагрузку на сервер при инициализации и работе. Для начала скачайте архив библиотеки и распакуйте его, например, в папку 'phpmorphy'. По возможности в директории недоступной web серверу. Для инициализации библиотеки подключите файл common. С возможными опциями настройки библиотеки можно ознакомиться здесь http: Для поиска мы будем использовать следующий подход: Для начала проиндексируем контент, по которому будет происходить поиск. В нашем примере поиск происходит по цветам в каталоге товаров. У товара есть идентификатор, наименование, краткое и полное описание. Создадим таблицу с товарами:. Каждая запись характеризуется уникальной парой слово-товар. При работе с библиотекой PhpMorphy cледует помнить, что термины в словарях хранятся в верхнем регистре, для удобства переведем контент в верхний регистр. Поэтому мы заменяем букву 'ё' на 'е'. В подробном описании могут содержаться html-теги, их мы не будем индексировать и от них следует избавиться. Данное регулярное выражение разбивает контент на отдельные слова. Для кириллицы используется модификатор 'u'. Следует помнить, что буква 'ё' не попадает в диапазон 'а-я'. Регулярное выражение корректно обработает такую строку:. Метод lemmatize по умолчанию сравнивает слово по словарям, при отрицательном результате пытается образовать начальную форму по внутренним правилам, если и это не удается вместо массива возвращается FALSE. В нашем примере мы использовали только русский словарь, но выбирали также и английские слова. Поэтому при невозможности образовать начальную форму мы индексировали входящее слово:. Словам в заголовке мы задаем вес 3, словам в кратком описании — 2, в полном — 1. При повторе слова увеличиваем его вес. Скрипт еще возможно улучшить, например, запретить индексирование определенных предлогов; индексировать определенные части речи, например, только существительные и прилагательные; исключать поиск по словам, которые присутствуют более чем в половине записей, к примеру слово 'описание' входит в полное описание каждого товара и поиск по этому слову и никак не характеризует конкретный товар. Данный скрипт позволяет с нуля проиндексировать весь контент, и служит лишь дополнительной утилитой. В реальном приложении необходимо индексировать текстовый контент только при добавлении или редактировании конкретной записи. Для индексации контента воспользуемся приведенным выше скриптом, но только не будем использовать цикл и будем работать с одной записью. Можно произвести некоторую оптимизацию. Допустим, кроме наименования, краткого и полного описания товар обладает еще несколькими характеристиками, и при редактировании пользователь меняет только цену. В этом случае индексированный контент не изменился и не требуется его повторная индексация. Этого можно избежать сравнив хеши индексируемого контента до и после редактирования товара. Если хеши совпадут, значит контент не менялся и не требуется его переиндексация. В итоге мы получаем список идентификаторов товаров, которые подходят под критерий поиска. Для наглядности записи с товарами мы берем вложенным запросом, однако на практике, возможно, лучшим решением будет взять список товаров отдельным запросом по их идентификаторам. Таким образом, на примере каталога цветов мы реализовали морфологический поиск на русском языке с использованием PHP, MySQL и PhpMorphy. Данный метод можно применить к любым разделам вашего сайта и сблизить посетителя и вас, просто выдав пользователю информацию, которую он искал. SONO-Разработка,внедрение и обслуживание высокотехнологичных IT систем Статьи Морфологический поиск на русском языке на PHP и MySQL Важной функцией на сайте является поиск по разделу или по всему сайту. Лемматизация получение нормальной формы слова Получение всех форм слова Получение грамматической информации для слова часть речи, падеж, спряжение и т. Изменение формы слова в соответствии с заданными грамматическими характеристиками Изменение формы слова по заданному образцу Поддерживаемые языки: Создадим таблицу с товарами: Далее возьмем из базы все записи о товарах: Здесь приведем скрипт, индексирующий товары, а далее дадим пояснения. Регулярное выражение корректно обработает такую строку: Поэтому при невозможности образовать начальную форму мы индексировали входящее слово: Напишите нам Ваше имя. Мы постараемся ответить в ближайшее время.

Приказ 645от 31.05 2016

Где находится исландия на карте мира

Выбор и обоснование способа сварки

Постельное белье для кукольной кровати своими руками

Первая передача как почистить кондиционер

Уголовно правовое значение эмоций

Скачать флеш плеер 3

Mitsubishi galant 2007 технические характеристики

Статья 112 налогового кодекса рф

Report Page