Форум программистов, компьютерный форум, киберфорум
Наши страницы
PHP
Войти
Регистрация
Восстановить пароль
 
 
Риназ
12 / 2 / 2
Регистрация: 16.06.2017
Сообщений: 454
#1

Как найти слово через цикл? - PHP

15.05.2018, 16:32. Просмотров 620. Ответов 44
Метки нет (Все метки)

Всем привет! Можно ли найти слово таким образом:
Например: Есть текст: Привет как дела? У меня хорошо, а у тебя как?
И слово: как
В данном случае в обеих предложениях есть слово как(т.е. всего 2).
Можно ли сделать условие, если их больше 1, то начать цикл, который берет первое слово с текста и ставит после слова "как". Если такое нету, то берет второе слово и т.д, пока не получится "как дела"?
Т.е. должно получится так: Как Привет(нет), как как(нет), как дела(есть).
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.05.2018, 16:32
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Как найти слово через цикл? (PHP):

Как найти слово в тексте полученный через file_get_contents?
Всем привет! Есть сайт с большим кол-вом слов(не только слова, есть и ссылки и...

Как сделать цикл для того, чтобы достать лишь 1 слово?
Всем привет! Есть текст. Из этого текста я достаю 1 предложение, потом разбиваю...

Как найти слово в тексте без учета регистра?
Всем привет! Как найти слово в тексте без учета регистра? Пробовал так: <?...

Выводит div через цикл так, как не нужно
Всем привет. Впервые сталкиваюсь с созданием сайта, точнее его...

Как передать выбранное слово через FORM
Это кусок из выпадающего списка Каким образом можно передать слово Чёрный...

Как найти ключевое слово и вывести 5 строк от слова вниз
Как найти ключевое слово и вывести 5 строк от слова вниз? Есть файл с...

44
worldown
163 / 161 / 100
Регистрация: 22.06.2009
Сообщений: 475
15.05.2018, 18:01 #2
Цитата Сообщение от Риназ Посмотреть сообщение
Можно ли сделать условие, если их больше 1, то начать цикл, который берет первое слово с текста и ставит после слова "как". Если такое нету, то берет второе слово и т.д, пока не получится "как дела"?
зачем такие сложности? Что в конце концов хотите получить?
Мне кажется тут регулярные вырожения внесли бы ясность...
0
Риназ
12 / 2 / 2
Регистрация: 16.06.2017
Сообщений: 454
15.05.2018, 18:52  [ТС] #3
worldown, Есть текст, пользователь вводит слова(через пробел) и 1 предложение, эти слова записываются в массив. Если 2 или более этих слов есть в тексте, то найти наиболее подходящее добавив в слово 1 слово из предложения, который ввёл пользователь.
0
worldown
163 / 161 / 100
Регистрация: 22.06.2009
Сообщений: 475
15.05.2018, 20:38 #4
Риназ, хоть убей, но не могу понять логики
0
Риназ
12 / 2 / 2
Регистрация: 16.06.2017
Сообщений: 454
15.05.2018, 22:02  [ТС] #5
тогда постараюсь объяснить на примере:
Есть 2 текстовых поля. На первое поле пользователь вводит слова(любые)
раз два три четыре пять
, а на второе предложение(любое)
Сегодня в четыре часа утра показывали кино
И у меня есть большой текст.
Начинается проверка на наличие слов в тексте. В моем тексте 3 раза используется слово "четыре". И т.к. это слово используется больше одного раза, то начинаем взять по одной слове с предложения, который ввел пользователь. И делать это до тех пор, пока в тексте не найдем такую комбинацию слов или пока не закончится предложение. Должно получится так:
четыре Сегодня (такой комбинации в моем тексте нету, продолжаем).
четыре в (нету, продолжаем)
четыре часа (есть, останавливаем цикл и выводим эту комбинацию(четыре часа)).
0
worldown
163 / 161 / 100
Регистрация: 22.06.2009
Сообщений: 475
15.05.2018, 23:50 #6
Риназ, т.е введённые в первом поле слова сверяются со словами в предложении (второе поле), если находятся соответствия то найденное слово выводится вместе с словом стоящим справа от найденного слова. Так? А почему не со словом стоящим слева от найденного слова?
0
Риназ
12 / 2 / 2
Регистрация: 16.06.2017
Сообщений: 454
16.05.2018, 07:24  [ТС] #7
worldown, Да без разницы слева справа. Просто надо соответствие с моим текстом.
Если в моём тексте так:
Четыре часа (то справа),
а если так:
часа четыре (то слева).

Надо с обеих сторон проверить(если это возможно).
0
worldown
163 / 161 / 100
Регистрация: 22.06.2009
Сообщений: 475
16.05.2018, 07:57 #8
Риназ, а откуда программа знает что «часа» является неотъемлемой частью для слова «четыре»?
0
Риназ
12 / 2 / 2
Регистрация: 16.06.2017
Сообщений: 454
16.05.2018, 08:02  [ТС] #9
worldown, он не знает, он просто сравнивает, есть ли в тексте "четыре часа" если есть, то вывести. Это я сделал через prey_match.
0
worldown
163 / 161 / 100
Регистрация: 22.06.2009
Сообщений: 475
16.05.2018, 09:36 #10
Риназ,
Входные:
раз два три четыре пять
уже четыре раза смотрел фильм

Вывод:
четыре раза

*****************************
Входные:
раз два три четыре пять
я думаю часа два будет идти дождь

Вывод:
часа два

*****************************

Как программа грамматический верно выбрала подходящие связанные слова ?
0
Риназ
12 / 2 / 2
Регистрация: 16.06.2017
Сообщений: 454
16.05.2018, 12:14  [ТС] #11
worldown, она не по грамматики выбирает, а просто ищет совпадение. Если пользователь допустил ошибку: чытыре, то она выведет ошибку, т.е не найдёт.
0
worldown
163 / 161 / 100
Регистрация: 22.06.2009
Сообщений: 475
16.05.2018, 12:16 #12
Цитата Сообщение от Риназ Посмотреть сообщение
она не по грамматики выбирает, а просто ищет совпадение.
В таком случае работать будет так
Входные:
раз два три четыре пять
уже четыре раза смотрел фильм

Вывод:
четыре

*****************************
Входные:
раз два три четыре пять
я думаю часа два будет идти дождь

Вывод:
два

*****************************
0
Риназ
12 / 2 / 2
Регистрация: 16.06.2017
Сообщений: 454
16.05.2018, 12:18  [ТС] #13
worldownда, можно и так.
0
worldown
163 / 161 / 100
Регистрация: 22.06.2009
Сообщений: 475
16.05.2018, 12:35 #14
Риназ, т.е вам нужно так?
******************
Входные:
раз два три четыре пять
я думаю часа два будет идти дождь потом три часа светить солнце

Вывод:
два три
0
Риназ
12 / 2 / 2
Регистрация: 16.06.2017
Сообщений: 454
16.05.2018, 12:39  [ТС] #15
worldown, нет, надо вывести только два или три. Для этого надо сравнить, как я описал выше.
0
worldown
163 / 161 / 100
Регистрация: 22.06.2009
Сообщений: 475
16.05.2018, 12:42 #16
Риназ, сравнить какое слово встречается чаще то и выводим? А если одинаковое кол-во раз встречается ?
0
Риназ
12 / 2 / 2
Регистрация: 16.06.2017
Сообщений: 454
16.05.2018, 12:46  [ТС] #17
Тогда вывести оба.
0
worldown
163 / 161 / 100
Регистрация: 22.06.2009
Сообщений: 475
16.05.2018, 14:25 #18
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
<?php
// Example 1
$find  = "раз два три четыре пять";
$countWords = [];
$text = "я думаю часа два два будет два идти три дождь потом три часа светить солнце";
 
$findArr = explode(" ", $find);
$i = 0;
foreach($findArr as &$p){
    $countWords[$i] = 0;
    $pos = 0;
        
    while(true) {
        $pos = strpos($text, $p, $pos);
        if($pos !== false) {
            $countWords[$i]++;
            $pos++;
        } else {
            break;
        }
    }
    $i++;
    
};
 
function getMaxValue($arg) {
    $max = 0;
    foreach($arg as &$p) {
        if($max < $p) {
            $max = $p;
        }
    }
    return $max;
}
 
$maxVal = getMaxValue($countWords);
for($i = 0; $i < count($findArr); $i++) {
    if($countWords[$i] == $maxVal && $maxVal > 0 ) {
        echo "$findArr[$i] ";
    }
}
?>
0
sasha0012
337 / 143 / 105
Регистрация: 21.06.2012
Сообщений: 660
16.05.2018, 16:14 #19
Можно и так:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$find  = "раз два три четыре пять";
$findArr = explode(" ", $find);
$text = "я думаю часа два два будет два идти три дождь потом три часа светить солнце";
$textArr = explode(" ", $text);
$valuesArr = array_count_values($textArr);
$max=0;
$slovo="";
 
foreach($findArr as $value){
    if(isset($valuesArr[$value]) AND $valuesArr[$value]>$max){
        $max = $valuesArr[$value];
        $slovo = $value;
    }
};
 
echo $slovo;
Добавлено через 12 минут
Для повторяющихся слов:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
$find  = "раз два три четыре пять";
$findArr = explode(" ", $find);
$text = "раз я думаю часа два два будет два идти три дождь потом три три часа светить солнце";
$textArr = explode(" ", $text);
$valuesArr = array_count_values($textArr);
$max=0;
 
foreach($findArr as $value){
    if(isset($valuesArr[$value]) AND $valuesArr[$value]>$max){
        $max = $valuesArr[$value];
    }
}
 
$key = array_keys($valuesArr, $max);
 
foreach($key as $value){
    echo $value."<br>";
}
0
Риназ
12 / 2 / 2
Регистрация: 16.06.2017
Сообщений: 454
16.05.2018, 19:40  [ТС] #20
worldown, sasha0012, А как подключить мой текст?
0
16.05.2018, 19:40
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.05.2018, 19:40
Привет! Вот еще темы с решениями:

Как называется выражение <<<слово . слово;
Как эту запись правильно назвать? Оператором, конструкцией языка или ещё как?...

Как распечатать всё из таблицы через DataTable через цикл
Как распечатать всё из таблицы через DataTable? lb2.Text = row2.ToString();...

Найти сумму через цикл
Что здесь неправильно? #include &lt;iostream&gt; #include &lt;conio.h&gt; #include...

Как в открытом текстовом файле найти слово и удалить строку которая содержит это слово?
Как в открытом текстовом файле найти слово и удалить строку которая содержит...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru