Скрипт для определение ключевых слов

Статус
В этой теме нельзя размещать новые ответы.

CrashX

В прошлом XSiteCMS
Регистрация
6 Июн 2008
Сообщения
681
Реакции
114
Скрипт для определение ключевых слов
также не помешала бы функция определения плотности, если возможно приутствие морфологиечекого модуля, для отсечения частей слов и поиска только части слова.
можно все отдельно, частично не доработанный ксрипты, главное что бы они НЕ использовали дополнительный библиотек расширений PHP и стороних программ типа вот этого Для просмотра ссылки Войди или Зарегистрируйся
если есть дайте хоть что нибуть а то бьсь уже который день((
 
  • Заблокирован
  • #2
Автоматическое определение ключевиков:


Морфология:


С первым кое-какой опыт есть: спорно, но жить можно.
О втором много положительных отзывов, но сам не пробовал.
 
первое реализовал, у меня это было сделано да только криво работало... поправил 1-й функцей))
2 а за морф огромногое спасибо, это именно то что я искал.... возможно не все что хочу там есть или наверное еще не понял как этим пользоваться))
---
ЗЫ тему можно закрывать
 
первое реализовал, у меня это было сделано да только криво работало... поправил 1-й функцей))
2 а за морф огромногое спасибо, это именно то что я искал.... возможно не все что хочу там есть или наверное еще не понял как этим пользоваться))
---
ЗЫ тему можно закрывать

Поделись наработками, если не жалко ;)
 
выводы

я исходил из того что ключевое слово это наиболее часто встречаемое слово в тексте, а вот морфологию пока не догоню как прикрутить, знаю что нужно сделать но насчтет как, думаю))
часть функция у меня одноименные, тк некоторым я просто не доверяю, были случаи некоректной их работы, если кто не хочет может использовать такие же как есть в
и так
PHP:
<?php
//debug
function _print($str,$name='')
{
$print=false;
echo"<pre align='left'>";
echo "<b>".$name."</b><br />";
if(print_r($str)): $print=true; endif;
echo"</pre>";
return $print;
}
//debug
/**
* Удаление символов переноса, возврата каретки, табуляции
* @param string
* @return string
*/
function str_trim(&$str)
{
$str=trim($str);
$str=str_replace("\n","",$str);
$str=str_replace("\r","",$str);
$str=str_replace("\t","",$str);
return $str;
}

function divide(&$array,$min=5,$max=15)
{
$words=array();
reset($array);
foreach($array as $string):
  if(strlen($string) >= $min && strlen($string) <= $max):
    $words[]=$string;    
  endif;
endforeach;
$array=$words;
unset($words);
return $array;
}

function keywords($str,$count=15,$min=5,$max=15)
{
// ну тут ваш массив должен быть)) или 	смотри коменты
global $config;
//---------------------<
$keywords=array();
$offset=0;
$symbol=array(",",".",";",":","@","~","-","–","+","?","!","'",'"');
$fastquotes=array( "\x27", "\x22", "\x60", "\t","\n","\r",'"',"'", "\\", '\r', '\n', "/","{","}","[","]");
$quotes=array( "\x27", "\x22", "\x60", "\t","\n","\r","'",",",".","/","¬","#",";",":","@","~","[","]","{","}","=","-","+",")","(","*","&","^","%","$","<",">","?","!", '"' );
$str=strtolower($str);
$str=str_replace($symbol,' ',$str);
str_trim($str);
$str=preg_replace("#\<.+?\>|</.+?\>#is"," ",$str);
$str=str_replace($fastquotes,'',str_trim($str));
$str=str_replace($quotes,'',$str);
$words=preg_split("/[\s]+/s",$str);
divide($words,$min,$max);
$words=array_count_values($words);
arsort($words);
$words=array_keys($words);
$words=array_unique($words);
$words=array_slice($words,$offset,$count);
//если остальное не нужно то ...  и раскоментируйте сл строку
//return $words=implode(", ",$words);
//
// тут нада свои ключи соощать
$meta=preg_split("/[\^s,]+/s",str_trim($config['keywords']));
$free=$count-count($meta);
// тут нада заголовок тепередать
$title=preg_split("/[\s]+/s",str_replace($quotes,'',$config['title']));
divide($title,$min,$max);
shuffle($title);

if(count($title) <= $free):
  $limit=count($title);
else:
  $limit=$free;
endif;
$title=array_slice($title,$offset,$limit);

$keywords=array_merge($meta,$title,$words);
$keywords=implode(", ",$keywords);
return $keywords;
}

//example| пример
global $config;
$fp=fopen('test.txt','r');    
$filesize = filesize('test.txt');
$str=fread($fp,$filesize);
fclose($fp);
// в переменной $str обычный текст, можно стегами)) они все равно вырежутся
//стандартные ключевые слова которые у вас на сайте
// можно в функции указать свои переменные
$config['keywords']='ключ, ключ1, ключ2';
//заголовок текущей страницы
$config['title']='мой сайт - заголовок текущей страницы';
// что за переметры 1 текст который анализируем, 
//2- колличестко слов которе неоходиом выдрать + 
//еще слова будут из заголовка и своих ключевых слов
//3- 6 мининмальная длина слова, ну нам не нужны слова типа ты, мне, да, и ,в и тп... (оптимально 5-6)
//4- 15 макимальная длина слова, низнаю просто сдел вдуг захочу ограничить))
$config['keywords']=keywords($str,25,6,15);

_print($config,'KeyWords');

echo '<meta name="keywords" content="'.$config['keywords'].'">';
//выводить  напимер так
?>

что нужно еще сделать
определить корень слова и прогнать по массиву, те в которых он встречается удалить приэтом подсчитывать это колличество...
---
ну а если помечатать, то еще бы неплохо было что бы можно выделать словасочетания.. но это уже другое тут нужен мощный морфологический движок... скорее всего для таких случаев нужно будет использовать какой нибуть сервис или морф от яндекса ввиде шелы, кароче замутно... тк если юзать другой сервис, то он должен быть ооочнь быстрым, но увы невозможно...
 
вот шикарная весчь по теме
Грамматический разбор html текста в кодировке UTF-8 на предложения и слова.

Для html текста делается нормализация
Для каждого слова подсчитывается его вес и вычисляется абсолютная и относительная позиция.
Поддерживаются английский, турецкий, русский, татарский языки.
Пришлось приложить много усилий, чтобы класс работал достаточно быстро.
Класс м.б. полезен при разработке полнотекстового поиска.
 

Вложения

  • TextParser-4.5.5.rar
    18,5 KB · Просмотры: 69
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху