Модераторы: skyboy, MoLeX, Aliance, ksnk

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Водность текста 
:(
    Опции темы
sanitarn
Дата 25.6.2015, 16:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 56
Регистрация: 3.10.2014

Репутация: нет
Всего: нет



Всем привет, возник вопрос, хочу банально сделать форму дял ввода текста, после просчет его водности и тошноты, так вот.
Имею текст, нужно найти в тексте все точные вхождения из массива, затык в том, что через preg_match_all он находит все что угодно, то есть cat и catalog, а нужно точное совпадение.
PM MAIL   Вверх
ksnk
Дата 25.6.2015, 17:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 96
Всего: 386



Ну дык и искать надо  '#\bcat\b#', чтобы не попадался catalog

Это сообщение отредактировал(а) ksnk - 25.6.2015, 17:22


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
sanitarn
Дата 25.6.2015, 17:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 56
Регистрация: 3.10.2014

Репутация: нет
Всего: нет



Цитата(ksnk @  25.6.2015,  17:22 Найти цитируемый пост)
Ну дык и искать надо  '#\bcat\b#', чтобы не попадался catalog

Не вариант, так ничего не находит:
Код

$stopwords = array('потому что',' Я','ты','люб');
$text = "потому что Любимый мой! бы то ни было Я хочу сказать тебе, что ты у меня самый любимый!";


foreach ($stopwords as $slovo)
{



 preg_match_all ("/\b$slovo\b/", $text, $matches);

 print_r($matches);


PM MAIL   Вверх
sanitarn
Дата 25.6.2015, 17:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 56
Регистрация: 3.10.2014

Репутация: нет
Всего: нет



Решил таким способом  preg_match_all ('/\s+'.$slovo.'\s+/', $text, $matches);

PM MAIL   Вверх
ksnk
Дата 25.6.2015, 19:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 96
Всего: 386



И что, первое слово тоже ловит?

Я бы делал вот так
Код

preg_match_all ('/\b'.preg_replace('/\s+/','\s+',preg_quote(trim($slovo))).'\b/', $text, $matches);

, но пример и так нормально работает и в первом и во втором случае выдает 
Код

Array
(
    [0] => Array
        (
            [0] => потому что
        )

)
Array
(
    [0] => Array
        (
            [0] =>  Я
        )

)
Array
(
    [0] => Array
        (
            [0] => ты
        )

)
Array
(
    [0] => Array
        (
        )

)


Добавлено через 3 минуты и 5 секунд
Для UTF-8 лучше добавить модификатор /u в регулярку и /s для поиска по многострочным строкам.


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
baldina
Дата 25.6.2015, 23:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 26
Всего: 101



Цитата(sanitarn @  25.6.2015,  17:27 Найти цитируемый пост)
так ничего не находит

Цитата(sanitarn @  25.6.2015,  17:27 Найти цитируемый пост)
"/\b$slovo\b/"


еще бы. в двойных кавычках спецсимволы экранируют.
Код

"/\\b$slovo\\b/"


но '\b' в данном случае это не то что надо, т.к. ищутся не слова (с точки зрения preg).
так что 
Код

'/(?:^|\s)'.trim($slovo).'(?:\s|$)/'


Добавлено через 2 минуты и 16 секунд
Цитата(ksnk @  25.6.2015,  19:19 Найти цитируемый пост)
Я бы делал вот так

ну или да))
PM MAIL   Вверх
sanitarn
Дата 26.6.2015, 12:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 56
Регистрация: 3.10.2014

Репутация: нет
Всего: нет



Спасибо, а теперь такой вопрос, как посчитать сколько данных найдено в каждом массиве? При помощи count, но как? Суммировать все данные?
PM MAIL   Вверх
ksnk
Дата 26.6.2015, 13:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 96
Всего: 386



sanitarn, count($matches[0]), если что нашлось.

Добавлено через 1 минуту и 58 секунд
baldina, Для вот такого примера - использование ограничителей-пробелов не будет работать. Слово Я не удастся найти 3 раза.


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
sanitarn
Дата 26.6.2015, 13:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 56
Регистрация: 3.10.2014

Репутация: нет
Всего: нет



Цитата(ksnk @  26.6.2015,  13:01 Найти цитируемый пост)
sanitarn, count($matches[0]), если что нашлось.

Да не, вывести сколько данных в каждом массиве я знаю, как их все суммировать то? Как то в цикле?
Получил к примеру такие данные:
0
1
0
1
0
0
0
0
0
8
0
1
1
0
PM MAIL   Вверх
baldina
Дата 26.6.2015, 14:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 26
Всего: 101



Цитата(ksnk @  26.6.2015,  13:01 Найти цитируемый пост)
Для вот такого примера

согласен
PM MAIL   Вверх
ksnk
Дата 26.6.2015, 14:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 96
Всего: 386



Ну да, наверное, в том же цикле, что и слова ищешь. Задача-то какая стоит?


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
sanitarn
Дата 26.6.2015, 14:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 56
Регистрация: 3.10.2014

Репутация: нет
Всего: нет



Цитата(ksnk @  26.6.2015,  14:08 Найти цитируемый пост)
Ну да, наверное, в том же цикле, что и слова ищешь. Задача-то какая стоит? 

Задача найти все вхождения и в последствие то что нашлось суммировать.
PM MAIL   Вверх
ksnk
Дата 26.6.2015, 15:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 96
Всего: 386



И что не получилось?
+=  ?


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
sanitarn
Дата 26.6.2015, 15:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 56
Регистрация: 3.10.2014

Репутация: нет
Всего: нет



Цитата(ksnk @  26.6.2015,  15:18 Найти цитируемый пост)
+=  ? 



Цитата(ksnk @  26.6.2015,  15:18 Найти цитируемый пост)
И что не получилось?
+=  ?


Да банально не понимаю как в данном случае сложить все данные в  этих массивах. (пропустил видимо я данный раздел в мануале )  smile

PM MAIL   Вверх
ksnk
Дата 26.6.2015, 16:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 96
Всего: 386



Цикл есть? Вроде есть  smile 
Снаружи заведи переменную. $summ , к примеру.
В цикле прибавляй к ней нужные значения
$summ+=count($matches[0]);

Цикл  кончился - в переменной все вхождения всех стопслов.

Это было нужно?


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0587 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.