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

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Разделение слитной строки на слова на PHP

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Без описания
bt_corp
Отправлено: 02 Сентября, 2015 - 15:07:05
Post Id



Гость


Покинул форум
Сообщений всего: 71
Дата рег-ции: Май 2010  


Помог: 0 раз(а)




Здравствуйте, задача реализовать разделение строки на слова если такие встречаются в базе слов 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


-----
Программист, это - такой человек, который сначала много думает, чтобы потом ничего не делать!
 
 Top
andrewkard
Отправлено: 02 Сентября, 2015 - 18:25:42
Post Id


Участник


Покинул форум
Сообщений всего: 1372
Дата рег-ции: Нояб. 2014  


Помог: 30 раз(а)




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.  
 
 Top
bt_corp
Отправлено: 02 Сентября, 2015 - 20:04:22
Post Id



Гость


Покинул форум
Сообщений всего: 71
Дата рег-ции: Май 2010  


Помог: 0 раз(а)




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.  


Большое спасибо!


-----
Программист, это - такой человек, который сначала много думает, чтобы потом ничего не делать!
 
 Top
DeepVarvar Супермодератор
Отправлено: 02 Сентября, 2015 - 20:15:50
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




bt_corp пишет:
разделение строки на слова если такие встречаются в базе слов
А у andrewkard хрень какая-то, т.к. в результате будет только то, что нашлось в банке, т.е. в строке удалит все чего нет в банке.

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


Участник


Покинул форум
Сообщений всего: 1372
Дата рег-ции: Нояб. 2014  


Помог: 30 раз(а)




DeepVarvar
Задача:
bt_corp пишет:
Было: thumbgreenappleactiveassignmentw eeklymetaphor.
Стало: thumb green apple active assignment weekly metaphor.

Хоть и хрень, но задачу выполнил Улыбка
Предложите Ваше решение.

(Отредактировано автором: 02 Сентября, 2015 - 20:56:05)

 
 Top
bt_corp
Отправлено: 02 Сентября, 2015 - 22:10:32
Post Id



Гость


Покинул форум
Сообщений всего: 71
Дата рег-ции: Май 2010  


Помог: 0 раз(а)




DeepVarvar пишет:
bt_corp пишет:
разделение строки на слова если такие встречаются в базе слов
А у andrewkard хрень какая-то, т.к. в результате будет только то, что нашлось в банке, т.е. в строке удалит все чего нет в банке.

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


Да полностью задачу не решили, нужно чтобы разбивались только слитные слова что есть в массиве а другие слова оставались на своих местах в строке. Может как-то регуляркой делать.. Растерялся Все это нужно для исправления слитных поисковых фраз.

(Отредактировано автором: 02 Сентября, 2015 - 22:13:02)



-----
Программист, это - такой человек, который сначала много думает, чтобы потом ничего не делать!
 
 Top
DeepVarvar Супермодератор
Отправлено: 02 Сентября, 2015 - 22:40:36
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




andrewkard пишет:
Предложите Ваше решение
Я бы вообще на сях проехался, ибо там намного проще "сдвигать" строку "вправо" через realloc+memmove, да и работать будет в десятки (если не сотни) раз быстрее.
Правда, если будут многобайтные кодировки, то придется поковыряться.
 
 Top
andrewkard
Отправлено: 02 Сентября, 2015 - 22:59:04
Post Id


Участник


Покинул форум
Сообщений всего: 1372
Дата рег-ции: Нояб. 2014  


Помог: 30 раз(а)




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.  

(Отредактировано автором: 02 Сентября, 2015 - 23:00:17)

 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB