Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Перебор массива на совпадения
Форумы портала PHP.SU » » Вопросы новичков » Перебор массива на совпадения

Страниц (1): [1]
 

1. vestmar - 27 Августа, 2014 - 00:57:14 - перейти к сообщению
Ни где в сети не нашёл даже намёка по решение,
в общем:
PHP:
скопировать код в буфер обмена
  1.  
  2. $new_lines = array();
  3. $tmp = file('new_anchors.txt'); // берем файл со строками по тематике купить велосипед в омске, в файле около 300 строк, разных ключей на эту тематику....
  4. foreach ($tmp as $v)
  5. {
  6.             $v = trim($v);
  7.             if (empty($v)) {continue;}
  8.             $new_lines[] = $v;
  9. }
  10.  
  11. $a = "buy velosiped in Omsk"; // допустим, этому ключу надо подобрать максимально похожий из списка выше ключ, "buy velosiped online in Omsk"
  12. $pieces = explode(" ", $a);
  13. print_r ($pieces); // "распиливаем" на ключ-значение в массив каждое слово
  14.  

и тут моя-тупить)
Подкиньте идею этого алгоритма поиска (максимально) схожих ключей из списка, а лучше что бы нашёл 5 максимально схожих и рандомно выбрал из них, только прошу без классов и всяких наворотов если можно) я месяц как учить начал...
2. tuareg - 27 Августа, 2014 - 08:23:49 - перейти к сообщению
Можно попытаться использовать levenshtein, но придется "заморачиваться" с кодировками, переводить все в анси из утф
3. vestmar - 27 Августа, 2014 - 10:05:14 - перейти к сообщению
Как раз вчера такое замутил) только с similar_text

PHP:
скопировать код в буфер обмена
  1. foreach ($new_lines as $key => $value)
  2.                 {
  3.                         $level = levenshtein($a, $value);
  4.                         similar_text($a, $value, $percent);
  5.                         $masiv [$percent] = $value;
  6.                 }
  7.                 krsort($masiv);
  8.                 print_r($masiv);

уже хороший результат, но хотелось бы ещё больше проверок, скажем по регуляркам, + проверяет если в искомом списке (в строке) есть 3 слова которые в этом ключе, то +9 к результату, если 2 то +6, если одно .... и т. д., кодировку переводить я думаю не придётся, хочу иметь очень сильный аглоритм определения, возможно со в временем подключить словарь синонимов которые буду указывать скрипту что Buy и Purcashe (эти глаголы) они не так уж и разные...

 

Powered by ExBB FM 1.0 RC1