Всем привет. Вот хочу упростить себе работу. И написать самый простенький скрпит поиска ключевых слов. Пока не знаю с чего начать. Пока вижу это так: 1. Получаю строку( текст слов этак в 300-400) применяю функию explode, которая все слова представит мне в виде массива с индексами. 2. Затем при помощи другой функции я должен найти из этого массива потворяющиеся слова (например более 2- раз) и отправить на вывод. как реализовать подобное или может подскажите функции для массивов и строк необходимые для этого. ??
топик клоз PHP: <?php $array = array(1, "hello", 1, "world", "hello"); print_r(array_count_values($array)); ?>
какой к чертям explode "привет, это строка" и что в массиве будет? привет, это строка тут нужен текстовый процессор или ругулярки, потом исключаешь союзы и считаешь
Так работает: PHP: <?php ini_set('display_errors',1); error_reporting(E_ALL); $array = array("ты", "я", "он", "ты", "я", "ты","я", "я", "он", "я", "я", "я",); $key=array_count_values($array); foreach ($key as $key => $value) { if($value>2) { echo "$key ,"; } } ?> А вот так выдает не то PHP: <?php ini_set('display_errors',1); error_reporting(E_ALL); $array = array("ты", "я", "он", "ты", "я", "ты","я", "я", "он", "я", "я", "я",); $key=array_count_values($array); foreach ($key as $key => $value) { if($value>2) { echo " <head> "; echo "<title>$key</title>"; echo "<link rel='stylesheet' type='text/css' href='index.css'>"; echo "<meta name='description' content='MP3 music store. You Can Buy Music On MP3 CD Here. Low Price !'>"; echo "<meta name='keywords' content='$key'>"; echo " </head> "; } } ?>
В титл попадает только слово "ты" (( Полагаю , что и в мету попадает тоже слово ты В первом же варианте скрипта все работает нормально: (выодятся слова и ты и я)
Не знаю что ты хотел сказать выражением Код (Text): if($value>2) и не уверен что запись Код (Text): foreach ($key as $key => $value) всегда будет работать корректно, но думаю ты создал гидру.
А шшшооо такое гидра ??)) я просто сам не местный и не понимаю ... Типа если слово повторяется больше 2 раз в тексте. Это я хотел сказать. Почему Foreach не будет работать корректно ??
Точно, что-то я затупил. Может и будет, но имя массива и имя переменной с ключом элемента совпадает, что может запутать как программиста так и интерпретатор. (выделено мной)
Padaboo Договорились, я пишу анализатор, ты на себя берешь кредит...)) Понимаешь, в поисковых системах анализатор не много значит, это вообще отдельная наука, вроде Брин защитил работу на тему: "Извлечении информации из неструктурированных источников и поиск в крупных собраниях текстовых и научных данных", один анализатор ключевых слов в тексте погоду не сделает тут и ИЦ требуется и релевантность)))
Ребята ..ну куда вы уехали то .??) Мне нужно то всего: 1. Чтобы функция создала массив с кол-вом вхождений каждого слова. Это сделала array_count_values, 2. а потом записать в mety все слова встречающиеся больше 2 раз. Неужели это нельзя кооректно сделать..??
1. array_count_values не даст склонений (различные окончания слов), так свойственных русскому языку. Я вижу несколько вариантов решения проблемы: 1.1. Модификация алгоритма шинглов. 1.2. Сфинкс со стеммингом для русского языка. 2. Если автора вопроса устраивает решение с array_count_values, то нужно использовать join: PHP: <?php $array = array("ты", "я", "он", "ты", "я", "ты","я", "я", "он", "я", "я", "я",); $key=array_count_values($array); // Если хотим получить num_words наиболее часто встречающихся // $num_words = 2; // arsort($key); // $keywords = array_slice(array_flip($key), 0, $num_words); // Если хотим получить отсечение по порогу function gt2($var) { $treshold = 2; return $var>$treshold; } $keywords = array_flip(array_filter($key, "gt2")); $keywords = join(' ', $keywords); ?>
Вот работающий код с ключевиками. PHP: <?php ini_set('display_errors',1); error_reporting(E_ALL); $array = array("ты", "я", "мы", "мы", "мы", "он", "ты", "я", "ты","я", "я", "он", "я", "я", "я",); $mass=array_count_values($array); echo "<meta name='keywords' content='"; foreach ($mass as $key => $value) { if($value>2) { echo "$key ,"; } } echo "'>"; ?> voxel твой код почему-то не работает
Вот и с ключевиками и с титлом PHP: <?php ini_set('display_errors',1); error_reporting(E_ALL); $array = array("ты", "я", "он", "ты", "я", "ты","я", "я", "он", "я", "я", "я",); $mass=array_count_values($array); echo "<title>"; foreach ($mass as $key => $value) { if($value>2) { echo "$key ,"; } } echo "</title>"; echo "<meta name='keywords' content='"; foreach ($mass as $key => $value) { if($value>2) { echo "$key ,"; } } echo "'>"; ?>
Вот поиск титлов но уже по другому скрипту PHP: <?php ini_set('display_errors',1); error_reporting(E_ALL); $string = "жизнь тяжелая штука, когда жизнь бьет тебя."; echo "<title>"; $string_array = explode(" ",$string); foreach($string_array as $value) { if(isset($str_count[$value])) $str_count[$value]++; else $str_count[$value]=1; } foreach($str_count as $key => $value) { if($value>1) { echo "$key, "; } } echo "</title>"; ?>