Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Как заставить str_word_count считать слова в русском тексте?
 
 автор: Holsten Bier   (08.08.2006 в 14:56)   письмо автору
 
 

Попытка применить str_word_count к строке, содержащей текст, написанный русскими буквами, приводит к тому, что в выходной массив попадают одни обрывки слов и отдельные буквы.

Пример


<?php
$page_contents 
"Однажды в студеную зимнюю пору я из лесу вышел - был сильный мороз";
$words_arr str_word_count($page_contents1);
print 
"<PRE>";
print_r($words_arr);
print 
"</PRE>";

?>


Вот это получаю на выходе


Array
(
    [0] => а
    [1] => ы
    [2] => в
    [3] => е
    [4] => з
    [5] => м
    [6] => р
    [7] => з
    [8] => ле
    [9] => вы
    [10] => ел
    [11] => был
    [12] => л
    [13] => ы
    [14] => м
    [15] => р
    [16] => з
)


Помогите, плз, кто чем может!

   
 
 автор: RV   (08.08.2006 в 15:06)   письмо автору
 
   для: Holsten Bier   (08.08.2006 в 14:56)
 

$words_arr = explode(" ", $page_contents);

   
 
 автор: Holsten Bier   (08.08.2006 в 15:09)   письмо автору
 
   для: RV   (08.08.2006 в 15:06)
 

А если в тексте полно хлама, помимо пробелов, а нужно получить массив слов, содержащих только буквы, дефисы, знаки подчеркивания и цифры?

   
 
 автор: cheops   (08.08.2006 в 21:38)   письмо автору
 
   для: Holsten Bier   (08.08.2006 в 15:09)
 

А под хламом что имеется ввиду? Можно формализовать пробельные символы при помощи регулярных выражений
<?php
  $words_arr 
preg_split("|[\s]+|s"$page_contents);
?>

   
 
 автор: Holsten Bier   (09.08.2006 в 00:05)   письмо автору
 
   для: cheops   (08.08.2006 в 21:38)
 

Мне бы хотелось сделать аналог функции str_word_count(), которая у меня (пакет Денвер-2) почему-то не работает, точнее работает, но не корректно. Искомая функция должна излечь из строки все слова, а точнее последовательности символов содержащие буквы английского и русского алфавитов и содержащие (но не начинающиеся с них) символы "одиночная кавычка" и "дефис" (ну и возможно "апостроф"). То есть символы типа {}[]()=+&^%$#@!/><\:;~ не должны встречаться в слове. А слова могут иметь вид:


abc
abc-abc
abc's


Я попробую предложенный вами вариант, похоже это единственное верное решение. Но все-таки не понятно, почему str_word_count() дала такой результат. Вы не могли бы мне объяснить?

И еще попутно вопрос: в перловых регулярных выражениях можно использовать любые ограничители (вы использовали '|')?

   
 
 автор: cheops   (09.08.2006 в 00:16)   письмо автору
 
   для: Holsten Bier   (09.08.2006 в 00:05)
 

Не корректность str_word_count() в чём выражается?

   
 
 автор: Holsten Bier   (09.08.2006 в 19:16)   письмо автору
 
   для: cheops   (09.08.2006 в 00:16)
 

В том, что в массив попадают не слова, а их отдельные части (см. первое сообщение).

   
 
 автор: cheops   (10.08.2006 в 17:36)   письмо автору
 
   для: Holsten Bier   (09.08.2006 в 19:16)
 

Попробуйте настроить локаль
http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=13537
http://www.softtime.ru/forum/read.php?id_forum=6&id_theme=6084

   
 
 автор: Holsten Bier   (11.08.2006 в 03:08)   письмо автору
 
   для: cheops   (10.08.2006 в 17:36)
 

Я попробовал следующее:


<?php
$sentense 
"Все попытки разложить текст на слова тщетны";
setlocale (LC_ALL, array ('ru_RU.CP1251''rus_RUS.1251'));
$words str_word_count($sentense1);

echo 
"<PRE>";
print_r($words);
echo 
"</PRE>";
?>


И при этом получил интересный результат: при нескольких рефрешах страницы получал разный вывод:
и такой

Array
(
    [0] => Все
    [1] => п
    [2] => пытк
    [3] => р
    [4] => зл
    [5] => т
    [6] => текст
    [7] => н
    [8] => сл
    [9] => в
    [10] => т
    [11] => етны
)

и такой

Array
(
    [0] => Вс
    [1] => п
    [2] => пы
    [3] => л
    [4] => с
    [5] => н
    [6] => сл
    [7] => ны
)


вот собственно.
PS: Я, к сож., не знаю как правильно составить стоку для настройки локали.

   
 
 автор: cheops   (11.08.2006 в 12:17)   письмо автору
 
   для: Holsten Bier   (11.08.2006 в 03:08)
 

>PS: Я, к сож., не знаю как правильно составить стоку для настройки локали.
Это нужно у хостера выяснить - у всех по разному.

   
 
 автор: Holsten Bier   (11.08.2006 в 15:45)   письмо автору
 
   для: cheops   (11.08.2006 в 12:17)
 

Спасибо за помощь, спрошу у хостера.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования