Регулярное выражение (как оптимально выделить первые три слова?)

Xander

Новичок
Регулярное выражение (как оптимально выделить первые три слова?)

Сильная штука регулярные выражения.
Научится бы ими ещё талантливо пользоватся.

Есть задача.
Написать функцию
Функция думаю должна быть предположительно на регулярных выражениях.
Но ето не столь важно. В данном вопрос главное скорость.
Так как функция за раздолжна обрабатывать туеву хучу строк взятых из базы.

Задача такая:
- Из каждой строки(строка не длинее 255 символов)
взять первые три слова не короче N-ого количества символов, сразу отметая слова исключения.

- Перед изъятием слов очистить строку от Любых символов, не образующий "слово"(включая знак подчеркивания)

- Привести это дело к нижнему регистру и записать слова через запятую


Путем долгих ковыряний был написан собсвенный код.
НО какой то он не правильный.
Что то мне подсказывает что ето можно сделать проще, быстрее и оптимальней.

PHP:
function GetWords($text,$N){     
$text=strtolower (preg_replace("[-]","_",$text)); 
$text=strtolower (preg_replace("[W]"," ",$text)); 
$text=preg_replace("[s+]", "  "," $text "); 
$text=preg_replace(" (s((S{1,$N})|or|and|of|com|tm|ltd|inc|the|net)s
)", " ",$text ); 
$text=preg_replace("([s_]+)", ",",trim($text)); 
$list=explode(",", $text);
$text=$list[0].",".$list[1].",".$list[2];
return $text; 
}
 

Xander

Новичок
PHP:
<?
function GetWords($text,$N){   
	$text=strtolower (preg_replace("[\-]","_",$text));	//Все прочерки меняем на подчеркивания
	$text=strtolower (preg_replace("[\W]"," ",$text));  //Очищаем строку от Любых символов, не образующий "слово"
	$text=preg_replace("[\s+]", "  "," $text ");		//Любую последовательность пробелов заменям думя пробелами
	$text=preg_replace("(\s((\S{1,$N})|or|and|of|com|tm|ltd|inc|the|net)\s)", " ",$text );// Удаляем слова паразиты, и слова короче $N символов заключеннные в пробелы 
	$text=preg_replace("([\s\_]+)", ",",trim($text)); // Любую последовательность пробела или подчеркивания заменям запятой
	$list=explode(",", $text); //Эксплодим по запятой в массив
	$text=$list[0].",".$list[1].",".$list[2]; // Берем первые три эллемента массива и вновь разделяем их запятой
	return $text;  
}
?>
 

HEm

Сетевой бобер
//Все прочерки меняем на подчеркивания
а) используйте str_replace
б) почему не на пробел?

//Любую последовательность пробелов заменям думя пробелами
Почему именно два? Почему не один?

// Любую последовательность пробела или подчеркивания заменям запятой
//Эксплодим по запятой в массив
- А давайте шило поменяем на мыло а мыло потом продадим!
- А почему бы шило не продать?
- А так интереснее!
 

Xander

Новичок
Теперь лучше?
PHP:
function GetWords($text){
$text=(str_replace(array("'", "-")," ",$text));// Заменяем все апострофы и прочерки пробелами 
$text=str_word_count(strtolower($text),1);// Приводим к нижнему регистру и нарезаем на слова
foreach ($text as $val){
	if (strlen($val)>2 and !(strpos("#|org|and|com|ltd|inc|the|net|#","|".$val."|"))){//Пропускаем слишком короткие и плохие слова
		$result.=" ".$val;
		$count++; 	//Счетчик набраных хороших слов
		if ($count >2) break;// Если есть три слова то выходим
	}
}
return (str_replace(" ","-",trim($result)));//Заменям пробелы прочерками
}
 
Сверху