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.SU

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


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

> Без описания
lex555
Отправлено: 07 Ноября, 2014 - 15:08:45
Post Id


Новичок


Покинул форум
Сообщений всего: 19
Дата рег-ции: Апр. 2009  


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

[+]



Разбивает предложение на слова через "," и записывает их все в одно поле meta_k
Нужно вытащить из предложения все слова больше 4-х букв и записать их каждое в отдельное поле бд.
 
 Top
kotyara1979
Отправлено: 07 Ноября, 2014 - 16:30:32
Post Id


Частый гость


Покинул форум
Сообщений всего: 247
Дата рег-ции: Окт. 2012  


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




PHP:
скопировать код в буфер обмена
  1. $str = str_replace(',','',$str);
  2. $str = str_replace('.','',$str);
  3. $arr = explode(' ',$str);
  4. foreach($arr as $key=>$val){if(strlen($val)<=4) unset($arr[$key]);}
  5.  


из массива уже сформируете нужный запрос.


-----
Сделать можно все. Главное одеть каску.
 
 Top
lex555
Отправлено: 07 Ноября, 2014 - 18:02:00
Post Id


Новичок


Покинул форум
Сообщений всего: 19
Дата рег-ции: Апр. 2009  


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

[+]


Подскажите где ошибка
PHP:
скопировать код в буфер обмена
  1. $str = str_replace(',','',$title);
  2. $str = str_replace('.','',$title);
  3. $meta_k = explode(' ',$str);
  4. foreach($meta_k as $key=>$val){if(strlen($val)<=4) unset($meta_k[$key]);}
  5. $result = mysql_query ("UPDATE date SET title='$title', meta_k='$meta_k' WHERE id='$id'",$db);
 
 Top
kotyara1979
Отправлено: 08 Ноября, 2014 - 03:56:42
Post Id


Частый гость


Покинул форум
Сообщений всего: 247
Дата рег-ции: Окт. 2012  


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




PHP:
скопировать код в буфер обмена
  1. $str = str_replace(',','',$title);
  2. $str = str_replace('.','',$str);
  3. $meta_k = explode(' ',$str);
  4. foreach($meta_k as $key=>$val){if(strlen($val)<=4) unset($meta_k[$key]);}
  5. $result = mysql_query ("UPDATE date SET title='$title', meta_k='".implode(',',$meta_k)."' WHERE id='$id'",$db);


-----
Сделать можно все. Главное одеть каску.
 
 Top
MAXUS
Отправлено: 08 Ноября, 2014 - 17:33:52
Post Id


Посетитель


Покинул форум
Сообщений всего: 329
Дата рег-ции: Апр. 2011  


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




PHP:
скопировать код в буфер обмена
  1. $string="asdasd, asdasd,asdasd7987asd,987a9s8d 987asd a9s87d as7d6a8s6da8sd7 0a9";
  2. preg_match_all("/\w{5}\w*/sui",$string,$keywords);
  3. echo "<pre>";
  4. print_r($keywords);
  5. echo "</pre>";


Если уж пользоваться регуляркой, то так - самый простой вариант.

(Отредактировано автором: 08 Ноября, 2014 - 17:38:26)

 
 Top
LIME
Отправлено: 08 Ноября, 2014 - 17:37:53
Post Id


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


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


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




\W\w{4,}\W
из середины таскать не будем же?
и пожалуй более 4 символов нам тоже нужны
(Добавление)
MAXUS извини))
я тоже не так давно поднатаскался))
 
 Top
MAXUS
Отправлено: 08 Ноября, 2014 - 17:41:22
Post Id


Посетитель


Покинул форум
Сообщений всего: 329
Дата рег-ции: Апр. 2011  


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




LIME пишет:
\W\w{4,}\W
из середины таскать не будем же?
и пожалуй более 4 символов нам тоже нужны
(Добавление)
MAXUS извини))
я тоже не так давно поднатаскался))


Я там на 5 исправил. А насчет из середины. В каком варианте string такое возможно?

Задача была: "вытащить из предложения все слова больше 4-х букв"
(Добавление)
Единственное, что я бы еще сделал с массивом - это убрал повторяющиеся значения...

(Отредактировано автором: 08 Ноября, 2014 - 17:41:56)

 
 Top
LIME
Отправлено: 08 Ноября, 2014 - 17:45:30
Post Id


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


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


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




0 - будут выбраны только четко размером 5
именно 5 а не 4(зря исправил)
1 - выбраны будут только если следом идет символ слова
2 - если слово длиной в 12 символов будут выбраны обе части этого слова(оно будет разбито что неправильно)

короче надо элементарно проставить границы чтоб они не были символами слова что я показал как
и нужно чтоб не четко шло количество символов а от 4 и более что я тоже показал
не проверял но не думаю что есть ошибки в моей регулярке
(Добавление)
3 - если слово короче 12 но длиннее 6 то будут выбраны только первые 5 символов(5 а не 4)
(Добавление)
хотя нет
выберутся 6 символов
(Добавление)
MAXUS спасибо? нет? ))
(Добавление)
еще не забудем о конце строки
 
 Top
MAXUS
Отправлено: 08 Ноября, 2014 - 17:59:13
Post Id


Посетитель


Покинул форум
Сообщений всего: 329
Дата рег-ции: Апр. 2011  


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




LIME пишет:

MAXUS спасибо? нет? ))


Ты прости, но я из сказанного тобой нифига не понял. Ты решаешь свои ошибки. Регулярка у меня:

/\w{5}\w*/sui

Присмотрись внимательно. Все, что ты сказал, ее не касается. Она работает, как надо. А ты ее обрезал и начал решать возникшие вследствие этого проблемыУлыбка
(Добавление)
lex555 пишет:
Нужно вытащить из предложения все слова больше 4-х букв и записать их каждое в отдельное поле бд.


Вощем, в итоге так:
PHP:
скопировать код в буфер обмена
  1. $string="цветы,мешки, мешки вертикальные, мешки горизонтальные,вершки и корешки, вершки325, стол, столы накрытые, столы взлохмаченные";
  2. preg_match_all("/\w{5}\w*/sui",$string,$keywords);
  3. $keywords=array_unique($keywords[0]);
  4. echo "<pre>";
  5. print_r($keywords);
  6. echo "</pre>";


Нормально выдирает ключевые слова более 4-х символов, при этом они не дублируются.
 
 Top
LIME
Отправлено: 08 Ноября, 2014 - 18:04:06
Post Id


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


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


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




нет нет и еще раз нет
описанные проблемы касаются именно твоей регулярки
присмотрись еще раз
если я ошибся пиши
(Добавление)
поправка
\W(\w{4,})\W
чтоб граничные символы не попали
берем только $1
 
 Top
MAXUS
Отправлено: 08 Ноября, 2014 - 18:15:30
Post Id


Посетитель


Покинул форум
Сообщений всего: 329
Дата рег-ции: Апр. 2011  


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




LIME пишет:
нет нет и еще раз нет
описанные проблемы касаются именно твоей регулярки
присмотрись еще раз
если я ошибся пиши


Или я недогоняю, или ты, или одно из двух.

"0 - будут выбраны только четко размером 5" Нет. Будут выбраны все слова более 4-х букв.
"1 - выбраны будут только если следом идет символ слова" Нет. Будут выбраны ВСЕ слова, которые состоят из \w, т.е. символ, цифра или подчеркивание.
"2 - если слово длиной в 12 символов будут выбраны обе части этого слова(оно будет разбито что неправильно)" Нет. Будет выбраны только слова более 4-х букв. Никаких разбивок на 2 слова не будет.
"3 - если слово короче 12 но длиннее 6 то будут выбраны только первые 5 символов(5 а не 4)" Нет. Будет выбрано все слово.

"не проверял но не думаю что есть ошибки в моей регулярке"
Ты мою лучше проверь.

\w{5}\w*/sui

Будут выбраны все слова, которые состоят из \w{5} пяти символов и еще \w*, т.е. пяти символов+любого количества символов. И все равно в конце, середине или начале строки.
 
 Top
LIME
Отправлено: 08 Ноября, 2014 - 18:18:40
Post Id


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


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


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




не поленился проверил
ты прав
чет я не догнал тут...завтра пересмотрю
сорь за лишний шум
(Добавление)
но 5 на 4 надо сменить
слова из 4 символов твоё не находит
 
 Top
MAXUS
Отправлено: 08 Ноября, 2014 - 18:24:00
Post Id


Посетитель


Покинул форум
Сообщений всего: 329
Дата рег-ции: Апр. 2011  


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




LIME пишет:
не поленился проверил
ты прав
чет я не догнал тут...завтра пересмотрю
сорь за лишний шум
(Добавление)
но 5 на 4 надо сменить
слова из 4 символов твоё не находит


На самом деле и я тупанул. Можно еще проще:

/\w{5,}/sui

Т.е. итог:

PHP:
скопировать код в буфер обмена
  1. $string="цветы,мешки, мешки вертикальные, мешки горизонтальные,вершки и корешки, вершки325, стол, столы накрытые, столы взлохмаченные";
  2. preg_match_all("/\w{5}\w*/sui",$string,$keywords);
  3. $keywords=array_unique($keywords[0]);
  4. echo "<pre>";
  5. print_r($keywords);
  6. echo "</pre>";

(Отредактировано автором: 08 Ноября, 2014 - 18:24:47)

 
 Top
LIME
Отправлено: 08 Ноября, 2014 - 18:24:56
Post Id


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


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


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




блин..
понял
\w*
это значит что может его не быть
\w{4,}\W
(Добавление)
4 не 5))
 
 Top
MAXUS
Отправлено: 08 Ноября, 2014 - 18:26:01
Post Id


Посетитель


Покинул форум
Сообщений всего: 329
Дата рег-ции: Апр. 2011  


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




LIME пишет:
слова из 4 символов твоё не находит


Еще раз. Задача: "Нужно вытащить из предложения все слова больше 4-х букв"...
 
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB