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
Форумы портала PHP.SU » PHP » Программирование на PHP » Разделение слитной строки на слова на PHP

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

1. bt_corp - 02 Сентября, 2015 - 15:07:05 - перейти к сообщению
Здравствуйте, задача реализовать разделение строки на слова если такие встречаются в базе слов http://pasted[dot]co/c1666a6b ~125K слов которые могут встречаться в слитной строке..
К примеру есть строка $str = "thumbgreenappleactiveassignmentweeklymetaphor";
после обработки должно получиться:
Было: thumbgreenappleactiveassignmentw eeklymetaphor.
Стало: thumb green apple active assignment weekly metaphor.

Помогите реализовать на PHP, вот пример на python http://stackoverflow[dot]com/questio[dot][dot][dot]to-list-of-words
2. andrewkard - 02 Сентября, 2015 - 18:25:42 - перейти к сообщению
bt_corp
простенький пример перебором в лоб. Код медленный.
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. $str = "thumbgreenappleactiveassignmentw eeklymetaphor";
  4. $arr_word = array('thumb', 'green', 'apple', 'active', 'assignment', 'weekly', 'metaphor');
  5. $arr_out = array();
  6. $str = str_replace(' ', '', $str);
  7.  
  8. foreach ($arr_word as $word){
  9.     if (strpos($str,$word) !== false){
  10.         $arr_out[]= $word;
  11.     }
  12. }
  13. echo '<pre>'; print_r($arr_out);
  14.  
3. bt_corp - 02 Сентября, 2015 - 20:04:22 - перейти к сообщению
andrewkard пишет:
bt_corp
простенький пример перебором в лоб. Код медленный.
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. $str = "thumbgreenappleactiveassignmentw eeklymetaphor";
  4. $arr_word = array('thumb', 'green', 'apple', 'active', 'assignment', 'weekly', 'metaphor');
  5. $arr_out = array();
  6. $str = str_replace(' ', '', $str);
  7.  
  8. foreach ($arr_word as $word){
  9.     if (strpos($str,$word) !== false){
  10.         $arr_out[]= $word;
  11.     }
  12. }
  13. echo '<pre>'; print_r($arr_out);
  14.  


Большое спасибо!
4. DeepVarvar - 02 Сентября, 2015 - 20:15:50 - перейти к сообщению
bt_corp пишет:
разделение строки на слова если такие встречаются в базе слов
А у andrewkard хрень какая-то, т.к. в результате будет только то, что нашлось в банке, т.е. в строке удалит все чего нет в банке.

А еще по ссылке http://pasted[dot]co/c1666a6b есть одно-, двух-, и.т.д -буквенные слова.
Значит, на прмере слова "metaphor" оно может при неверном алгоритме разэксплодить его на "a", "or", "me" например.
Так что задача только на первый взгляд простовата ))
5. andrewkard - 02 Сентября, 2015 - 20:55:22 - перейти к сообщению
DeepVarvar
Задача:
bt_corp пишет:
Было: thumbgreenappleactiveassignmentw eeklymetaphor.
Стало: thumb green apple active assignment weekly metaphor.

Хоть и хрень, но задачу выполнил Улыбка
Предложите Ваше решение.
6. bt_corp - 02 Сентября, 2015 - 22:10:32 - перейти к сообщению
DeepVarvar пишет:
bt_corp пишет:
разделение строки на слова если такие встречаются в базе слов
А у andrewkard хрень какая-то, т.к. в результате будет только то, что нашлось в банке, т.е. в строке удалит все чего нет в банке.

А еще по ссылке http://pasted[dot]co/c1666a6b есть одно-, двух-, и.т.д -буквенные слова.
Значит, на прмере слова "metaphor" оно может при неверном алгоритме разэксплодить его на "a", "or", "me" например.
Так что задача только на первый взгляд простовата ))


Да полностью задачу не решили, нужно чтобы разбивались только слитные слова что есть в массиве а другие слова оставались на своих местах в строке. Может как-то регуляркой делать.. Растерялся Все это нужно для исправления слитных поисковых фраз.
7. DeepVarvar - 02 Сентября, 2015 - 22:40:36 - перейти к сообщению
andrewkard пишет:
Предложите Ваше решение
Я бы вообще на сях проехался, ибо там намного проще "сдвигать" строку "вправо" через realloc+memmove, да и работать будет в десятки (если не сотни) раз быстрее.
Правда, если будут многобайтные кодировки, то придется поковыряться.
8. andrewkard - 02 Сентября, 2015 - 22:59:04 - перейти к сообщению
DeepVarvar пишет:
Значит, на прмере слова "metaphor" оно может при неверном алгоритме разэксплодить его на "a", "or", "me" например.

Cо словарем по убыванию, скорее всего.
DeepVarvar пишет:
Я бы вообще на сях проехался,

Еще не ездил Улыбка) Но то что быстрее будет, не спорю.
bt_corp пишет:
Все это нужно для исправления слитных поисковых фраз.

Еще один велосипед, не лучше первого:
PHP:
скопировать код в буфер обмена
  1.  
  2. $str = "thumbgreenappleactiveassignmentw eeklymetaphor";
  3. $arr_word = array('thumb', 'green', 'apple', 'active', 'assignment', 'weekly', 'metaphor');
  4. $str = str_replace(' ', '', $str);
  5.  
  6. foreach ($arr_word as $word){
  7.     $str = str_replace($word, ' '.$word.' ', $str);
  8. }
  9. $str = str_replace('  ', ' ', $str);
  10.  
  11. echo $str;
  12.  

 

Powered by ExBB FM 1.0 RC1