Главная :: Форум :: Web ClipArt :: Поиск :: Статистика :: Топ 10 :: Публикация :: Рекомендовать
netadmin.ws
Панель управления Регистрция свободна! Календарь Список пользователей Часто задаваемые вопросы Поиск по форуму Архив скриптов Главная   
Форум сетевых администраторов
Форум сетевых администраторов Форум сетевых администраторов » Программирование » PHP » Умный поиск?
Предыдущая тема     Следующая тема
Автор
Тема    Новая тема     Ответить на эту тему
Tagore
Сибиряк
Средний рейтинг: 3.58 | Оценок: 31
/нажмите чтобы посмотреть кто оценивал/

Зарегистрирован: Sep 2002
Место проживания: Новосибирск
Публикаций: 1255
Статус: Tagore в оф-лайне
Arrow Умный поиск? [сообщение #45644]

Kто знает что это? Взял из "Adrevenue" lib.php:
Может ли от этого быть толк в русском языку?


PHP:


// Created By: Joe Stump
// Created On: 2000-12-14
// Notes: This is the infamous "Porter Stemming Algorithm" - lots
// of serach engines use something similar to relate words. An example
// would be to turn "running" into "run" but "kissing" into "kiss".
// 
// Returns: string PorterStem(string word)
  
function stemmer($word)
  {
    
$vowels = array('a','e','i','o','u','y');
    
$o      = array('w','x','y');

    
$test_m = eregi_replace('^[a-z]','',$word);
    
$test_m = eregi_replace('[a-z]$','',$test_m); 
    for(
$i = 0 ; $i < strlen($test_m) ; ++$i)
    {
      if(
eregi('[b-df-hj-np-tw-z]',$test_m[$i]) && eregi('[aeiou]',$test_m[($i - 1)]))
      {
        ++
$total;
      }
    }

    if(
$total)
    {
      
$m = $total;
    }
    else
    {
      
$m = 0;
    }

    
// Step 1a
    
$replaces = array(
          
'/sses$/' => 'ss',
                  
'/ies$/' => 'i',
                  
'/ss$/' => 'ss',
                  
'/s$/' => '');

    while(list(
$search,$replace) = each($replaces))
    {
      
#$word = eregi_replace($search,$replace,$word);
      
$word = preg_replace($search,$replace,trim($word));
      
#print $word;
    
}

    
// Step 1b
    
if($m > 0)
    {
      
$word = eregi_replace('eed$','ee',$word);
    }

    
$do_more = 0;
     if(
eregi('[aeiou]',eregi_replace('ed$','',$word)))

    {
      
$word = eregi_replace('ed$','',$word);
      
$do_more = 1;
    }
   
     if(
eregi('[aeiou]',eregi_replace('ing$','',$word))
)
    {
      
$word = eregi_replace('ing$','',$word);
      
$do_more = 1;
    }

    if(
$do_more)
    {
      
$more_replace = array(
                        
'at$' => 'ate',
                        
'bl$' => 'ble',
                        
'iz$' => 'ize');
      while(list(
$s,$r) = each($more_replace))
      {
        
$word = eregi_replace($s,$r,$word);
      }

      
$length = strlen($word);
      
$last_letter = substr($word,($length - 1),$length);
      
$next_last_letter = substr($word,(strlen($word) - 2),-1);
      if((
$last_letter == $next_last_letter) && !in_array($last_letter,array('l','s','z')))
      {
        
$word = substr($word,0,(strlen($word) - 1));
      }

      if(
$m == 1 && eregi('[b-df-hj-np-tv-z][aeiou][b-df-hj-np-tv-z]$',$word) && !in_array($last_letter,$o))
      {
        
$word .= 'e';
      }
    }

  
    
// Step 1c
    
if(eregi('[aeiou]',$word) && eregi('y$',$word) && $m == 1 && !eregi('ly$',$word))
    {
      
$word = eregi_replace('y$','i',$word);
    }

    
// Step 2
    
$replaces = array(
                  
'ational$' => 'ate',
                  
'tional$' => 'tion',
                  
'enci$' => 'ence',
                  
'anci$' => 'ance',
                  
'izer$' => 'ize',
                  
'abli$' => 'able',
                  
'alli$' => 'al',
                  
'entli$' => 'ent',
                  
'eli$' => 'e',
                  
'ousli$' => 'ous',
                  
'ization$' => 'ize',
                  
'ation$' => 'ate',
                  
'ator$' => 'ate',
                  
'alism$' => 'al',
                  
'iveness$' => 'ive',
                  
'fulness$' => 'ful',
                  
'ousness$' => 'ous',
                  
'aliti$' => 'al',
                  
'iviti$' => 'ive',
                  
'biliti$' => 'ble');

    while(list(
$search,$replace) = each($replaces))
    {
      if(
$m > 0)
      {
        
$word = eregi_replace($search,$replace,$word);
      }
    }

    
// Step 3
    
$replaces = array(
                  
'icate$' => 'ic',
                  
'ative$' => '',
                  
'alize$' => 'al',
                  
'iciti$' => 'ic',
                  
'ical$' => 'ic',
                  
'ful$' => '',
                  
'ness$' => '');

    while(list(
$search,$replace) = each($replaces))
    {
      if(
$m > 0)
      {
        
$word = eregi_replace($search,$replace,$word);
      }
    }

    
// Step 4a
    
$replaces = array(
                  
'al$' => '',
                  
'ance$' => '',
                  
'ence$' => '',
                  
'er$' => '',
                  
'ic$' => '',
                  
'able$' => '',
                  
'ible$' => '',
                  
'ant$' => '',
                  
'ement$' => '',
                  
'ment$' => '',
                  
'ent$' => '',
                  
'tion$' => 't',
                  
'sion$' => 's',
                  
'ou$' => '',
                  
'ism$' => '',
                  
'ate$' => '',
                  
'iti$' => '',
                  
'ous$' => '',
                  
'ive$' => '',
                  
'ize$' => '');

    while(list(
$search,$replace) = each($replaces))
    {
      if(
$m > 1)
      {
        
$word = eregi_replace($search,$replace,$word);
      }
    }

    
// Step 5a
    
if($m > 1 && ereg('e$',$word))
    {
      
$word = eregi_replace('e$','',$word);
    }

    if(
$m == 1 && !(eregi('[b-df-hj-np-tv-z][aeiou][b-df-hj-np-tv-z]$',$word) && !in_array($last_letter,$o)))
    {
      
$word = eregi_replace('e$','',$word);
    }

    
// Step 5b
    
if($m > 1)
    {
      
$word = eregi_replace('ll$','l',$word); 
    }

    
// This is NOT part of the original Porter Stemming Algorithm
    
if($m > 0)
    {
      
$word = eregi_replace('ly$','',$word);
    }
    return 
$word;
  }

__________________
Международное брачное агенство в Сибири.

Сообщение было отредактировано Tagore 04-06-2003 в 15:37

Сообщить модератору об этом сообщении | Предупреждение | IP: определен

Old Post 04-06-2003 15:34
Нажмите сюда для просмотра профайла Tagore Отправить Персональное сообщение Tagore Посетить домашнию страничку Tagore! Найти сообщения от Tagore Добавить Tagore в свой список друзей Редактировать/Удалить сообщение Ответить Цитируя
RaZEr
Модератор
Средний рейтинг: 4.19 | Оценок: 16
/нажмите чтобы посмотреть кто оценивал/

Зарегистрирован: Mar 2002
Место проживания: Россия
Публикаций: 769
Статус: RaZEr в оф-лайне
[сообщение #46062]

Нет, для русского это работать не будет, хотя бы потому что в патернах нет русских букв и setlocale не стоит.

__________________
The time was broken ...

Сообщить модератору об этом сообщении | Предупреждение | IP: определен

Old Post 09-06-2003 09:23
Нажмите сюда для просмотра профайла RaZEr Отправить Персональное сообщение RaZEr Найти сообщения от RaZEr Добавить RaZEr в свой список друзей Редактировать/Удалить сообщение Ответить Цитируя
Tagore
Сибиряк
Средний рейтинг: 3.58 | Оценок: 31
/нажмите чтобы посмотреть кто оценивал/

Зарегистрирован: Sep 2002
Место проживания: Новосибирск
Публикаций: 1255
Статус: Tagore в оф-лайне
[сообщение #46077]

RaZEr
А другое решение? Что бы он был чуток к оканчаниям и тому-подобной дребедени?!

__________________
Международное брачное агенство в Сибири.

Сообщить модератору об этом сообщении | Предупреждение | IP: определен

Old Post 09-06-2003 12:07
Нажмите сюда для просмотра профайла Tagore Отправить Персональное сообщение Tagore Посетить домашнию страничку Tagore! Найти сообщения от Tagore Добавить Tagore в свой список друзей Редактировать/Удалить сообщение Ответить Цитируя
RaZEr
Модератор
Средний рейтинг: 4.19 | Оценок: 16
/нажмите чтобы посмотреть кто оценивал/

Зарегистрирован: Mar 2002
Место проживания: Россия
Публикаций: 769
Статус: RaZEr в оф-лайне
[сообщение #46080]

Ð_усский язык несколько сложнее и богаче чем английский. Максимум что можно сделать так это искать неточные совпадения.

__________________
The time was broken ...

Сообщить модератору об этом сообщении | Предупреждение | IP: определен

Old Post 09-06-2003 12:16
Нажмите сюда для просмотра профайла RaZEr Отправить Персональное сообщение RaZEr Найти сообщения от RaZEr Добавить RaZEr в свой список друзей Редактировать/Удалить сообщение Ответить Цитируя
Tagore
Сибиряк
Средний рейтинг: 3.58 | Оценок: 31
/нажмите чтобы посмотреть кто оценивал/

Зарегистрирован: Sep 2002
Место проживания: Новосибирск
Публикаций: 1255
Статус: Tagore в оф-лайне
[сообщение #46122]

RaZEr
А про этоможно где-то нормально почитать?

__________________
Международное брачное агенство в Сибири.

Сообщить модератору об этом сообщении | Предупреждение | IP: определен

Old Post 09-06-2003 16:03
Нажмите сюда для просмотра профайла Tagore Отправить Персональное сообщение Tagore Посетить домашнию страничку Tagore! Найти сообщения от Tagore Добавить Tagore в свой список друзей Редактировать/Удалить сообщение Ответить Цитируя
RaZEr
Модератор
Средний рейтинг: 4.19 | Оценок: 16
/нажмите чтобы посмотреть кто оценивал/

Зарегистрирован: Mar 2002
Место проживания: Россия
Публикаций: 769
Статус: RaZEr в оф-лайне
[сообщение #46184]

Может и можно, но врядли.

__________________
The time was broken ...

Сообщить модератору об этом сообщении | Предупреждение | IP: определен

Old Post 10-06-2003 09:34
Нажмите сюда для просмотра профайла RaZEr Отправить Персональное сообщение RaZEr Найти сообщения от RaZEr Добавить RaZEr в свой список друзей Редактировать/Удалить сообщение Ответить Цитируя



Формат времени GMT. Текущее время 10:21.
Новая тема   Ответить на эту тему [ Версия для печати Печать | Отправить эту страницу другу/знакомому! Отправить | Получать уведомления об обновлении этой темы Подписка ] Предыдущая тема     Следующая тема
Навигация по форуму:
Оценка темы:

Правила форума:
Вы не можете создавать новые темы.
Вы не можете отвечать на существующие темы.
Вы не можете прикреплять файлы.
Вы не можете редактировать свои сообщения.
HTML теги выкл.
Спец. код вкл.
Смайлики вкл.
[IMG] тег выкл.
 

Page generated in 2.18930793 seconds (99.76% PHP - 0.24% MySQL) with 26 queries.


  Главная :: Форум :: Web ClipArt :: Поиск :: Статистика :: Топ 10 :: Публикация :: Рекомендовать
©NetAdmin.ws, 2001-2026.
Powered by: vBulletin
Copyright ©2000, 2001, Jelsoft Enterprises Limited.