Последние записи
- TChromium (CEF3), сохранение изображений
- Как в Delphi XE обнулить таймер?
- Изменить цвет шрифта TextBox на форме
- Ресайз PNG без потери прозрачности
- Вывод на печать графического файла
- Взаимодействие через командную строку
- Перенести программу из Delphi в Lazarus
- Определить текущую ОС
- Автоматическая смена языка (раскладки клавиатуры)
- Сравнение языков на массивах. Часть 2
Интенсив по Python: Работа с API и фреймворками 24-26 ИЮНЯ 2022. Знаете Python, но хотите расширить свои навыки?
Slurm подготовили для вас особенный продукт! Оставить заявку по ссылке - https://slurm.club/3MeqNEk
Online-курс Java с оплатой после трудоустройства. Каждый выпускник получает предложение о работе
И зарплату на 30% выше ожидаемой, подробнее на сайте академии, ссылка - ttps://clck.ru/fCrQw
6th
Окт
Движок поиска для самописного сайта
Posted by Chas under php, Пост-обзор
Есть самописный движок, необходимо организовать поиск по БД (mysql), по двум полям — русское название и название на английском языке. При всем этом вариант типа
SELECT * FROM name WHERE
en_title LIKE %что-то%
OR ru_title LIKE %что-то%
совсем не подходит. Нужен поиск умнее, который может учитывать частичные совпадения и ранжировать соответственно результаты. Например, неграмотный пользователь пишет запрос: «велосепед» такого слова в БД нет, соответственно при поиске влоб пользователь получит ответ, что ничего не найдено. Но слово «велосипед» в БД есть и даже при неправильном запросе, но близком к этому слову пользователь должен получить релевантный результат. Кроме того, необходимо учитывать разные словоформы одного слова. Подскажите готовые решения или пути. Спасибо.
dem66
поиск с помощью словря phpMorphy.
я так у себя на сайтах делаю
<?php
$str="$_POST[name]";
if(eregi("[a-zA-z0-9]", $str)){
$search="$str";
}else{
include("functions.php");
$search="$vivod";
}
$error = "";
if(empty($search))
{
$error .= "<p>Вы не указали данные для поиска.</p>";
}
else
{
if (!get_magic_quotes_gpc())
{
$name = mysql_escape_string($search);
}
else
{
$name="$search";
}
$query = "SELECT * FROM tovar WHERE MATCH (name, opis) AGAINST ('$name' IN BOOLEAN MODE)";
$post = mysql_query($query);
if($post)
{
$numtot = mysql_num_rows($post);
if($numtot>0)
{
$rezult="";
while($posts = mysql_fetch_array($post))
{
$rezult .= "<tr>".$post['img']."</tr>";
}
$res="$numtot";
}
else
{
$error .= "<p>По запросу: $_POST[name] ничего не найдено!!!.</p>";
}
}
}
if(isset($error)) {
print $error;
print $rezult;
}
?>
<b><?php echo"Найдено: $res"; ?> результатов</b>
Содержимое файла functions.php
<?php
$word_one = strtoupper($str);
require_once('phpmorphy/src/common.php');
$opts = array(
'storage' => PHPMORPHY_STORAGE_MEM,
'with_gramtab' => false,
'predict_by_suffix' => true,
'predict_by_db' => true
);
$dir = 'phpmorphy/dicts';
$dict_bundle = new phpMorphy_FilesBundle($dir, 'rus');
// $dict_bundle .= new phpMorphy_FilesBundle($dir, 'eng');
$morphy = new phpMorphy($dict_bundle, $opts);
try {
$bulk_words = array($word_one);
$base_form = $morphy->getBaseForm($bulk_words);
$all_forms = $morphy->getAllForms($bulk_words);
$pseudo_root = $morphy->getPseudoRoot($bulk_words);
// echo '<br><br>' . implode(', ', $all_forms[$word_one]) . "\n";
$vivod = implode(', ', $all_forms[$word_one]);
//echo"$vivod";
} catch(phpMorphy_Exception $e) {
die('Error occured while text processing: ' . $e->getMessage());
}
?>
Вобщем суть такая -> когда пришел английский текст то морфология не используется, если написали по русски то используем морфологию. при желании можно использовать и английскую морфологию. ВНИМАНИЕ МОЖЕТ БЫТЬ ОДНОВРЕМЕННО ПОДКЛЮЧЕН ТОЛЬКО ОДИН СЛОВАРЬ!!!
// Русский
$dict_bundle = new phpMorphy_FilesBundle($dir, 'rus');
// или Английский
// $dict_bundle .= new phpMorphy_FilesBundle($dir, 'eng');
phpmorphy.zip (4.51 Мб) |
Похожие статьи
Купить рекламу на сайте за 1000 руб
пишите сюда - alarforum@yandex.ru
Да и по любым другим вопросам пишите на почту
пеллетные котлы
Пеллетный котел Emtas
Наши форумы по программированию:
- Форум Web программирование (веб)
- Delphi форумы
- Форумы C (Си)
- Форум .NET Frameworks (точка нет фреймворки)
- Форум Java (джава)
- Форум низкоуровневое программирование
- Форум VBA (вба)
- Форум OpenGL
- Форум DirectX
- Форум CAD проектирование
- Форум по операционным системам
- Форум Software (Софт)
- Форум Hardware (Компьютерное железо)