krot

dropBackWords

Nov 11th, 2017
83
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. function gen_wsearch($name){
  2. $name=stopWords($name);
  3. $ar=preg_split('#\s+#',$name);
  4. $arnew=array();
  5. $k=0;
  6. for($i=0,$size=sizeof($ar);$i<$size;++$i){
  7. $val0=$ar[$i];
  8. $val0=preg_replace('#^[^\w-а-яА-яё\d]+|[^\w-а-яА-яё\d]+$#u','',$val0);
  9. if(mb_strlen($val0,'UTF-8')<=2){
  10. if($arnew[$k]) $arnew[$k].=' '.$val0;
  11. else $arnew[$k]=$val0;
  12. }else{
  13. $val=&$arnew[$k++];
  14. if($val){
  15. $val0=dropBackWords($val0);
  16. $val.=' '.$val0;
  17. $arnew[$k++]=$val0;
  18. }
  19. else $val=dropBackWords($val0);
  20. }
  21. }
  22. return $arnew;
  23. }
  24. function dropBackWords($word) { //тут мы обрабатываем одно слово
  25.     $reg = "/(ый|ой|ая|ое|ые|ому|а|о|у|е|ого|ему|и|ство|ых|ох|ия|ий|ь|я|он|ют|ат|ок)$/iu"; //данная регулярная функция будет искать совпадения окончаний
  26.     $word = preg_replace($reg,'',$word); //убиваем окончания
  27.     return $word;
  28. }
  29. function stopWords($query) { //тут мы обрабатываем весь поисковый запрос
  30.     $reg = "/\s(на|под|много|что|когда|где|или|которые|поэтому|все|будем|как|для|в)\s/iu"; //данная регулярка отрежет все стоп-слова отбитые пробелами
  31.     $query = preg_replace($reg,' ',$query); //убиваем стоп-слова
  32.     return $query;
  33. }
RAW Paste Data