Поиск слова в тексте
Первое задание
Есть некоторый текст. Разработайте приложение, которое должно произвести поиск
слова. В результате работы приложения нужно отобразить количество раз, сколько
слово встречается в тексте.
При поиске необходимо учитывать следующие факторы:
■ поиск вне зависимости от регистра букв слова;
■ слово может быть отделено от других слов – пробелом, знаками препинания;
■ если слово есть в тексте, но в перевернутом виде, его надо учитывать в статистике поиска.
Второе задание
Добавить к первому заданию возможность поиска набора слов. Искомые слова нужно
хранить в списке
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:
Поиск в тексте самого длинного слова
Напишите программу для поиска в тексте самого длинного слова.
Поиск слова с наибольшим числом согласных в тексте
Дано: 3 текста с одинаковым текстом на разных языках: text1 = ("Ще не вмерли України, і.
Поиск слова с наибольшим числом согласных в тексте
Дано: 3 текста с одинаковым текстом на разных языках: text1 = ("Ще не вмерли України, і.
Выведите все слова, встречающиеся в тексте, разделяя их пробелом. Слова должны быть отсортированы по убыванию
Дан текст на языке племени Мумба-Юмба (файл text1.txt). Выведите все слова, встречающиеся в тексте.
Дан текст и два слова на русском языке. Определить сколько раз эти слова встречаются в тексте
Дан текст и два слова на русском языке. Нужно определить сколько раз эти 2 слова встречаются в.
1183 / 759 / 277
Регистрация: 05.09.2021
Сообщений: 1,772
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
'''Первое задание Есть некоторый текст. Разработайте приложение, которое должно произвести поиск слова. В результате работы приложения нужно отобразить количество раз, сколько слово встречается в тексте. При поиске необходимо учитывать следующие факторы: ■ поиск вне зависимости от регистра букв слова; ■ слово может быть отделено от других слов – пробелом, знаками препинания; ■ если слово есть в тексте, но в перевернутом виде, его надо учитывать в статистике поиска. Второе задание Добавить к первому заданию возможность поиска набора слов. Искомые слова нужно хранить в списке док''' res = {} pun = __import__('string').punctuation for line in __doc__.split('\n'): words = map(lambda x: x.strip(pun), line.lower().split()) for word in words: res[word] = res.get(word, 0) + 1 words_to_find = ['задание', 'текст', 'код'] for word in map(str.lower, words_to_find): print(f'Слово "" есть в тексте:' )
1 2 3
Слово "задание" есть в тексте: 2 Слово "текст" есть в тексте: 1 Слово "код" есть в тексте: 1
Добавлено через 3 минуты
Тут момент есть, со словами палиндромами, их задублирует. Решается просто, оставлю тебе на подумать.
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
Помогаю со студенческими работами здесь
Поиск слова в тексте и присвоение переменной этого слова
Здравствуйте. Помогите пожалуйста решить проблему. Есть файл index.html в нем есть слово, допустим.
Поиск слова в тексте
Доброго времени суток! Недавно VK добавили возможность создавать ботов для сообществ вконтакте.
ПОиск слова в тексте
Доброго всем время суток. У меня возникла некоторая проблемма, таак как программист я не опытный.
Python – наше всё: поиск строк в файле по ключевым словам
Есть решение, как с помощью Python осуществить поиск строк в файле по ключевым словам в столбцах.
10K открытий
Несомненно, многие из нас в своей работе не раз сталкивались с необходимостью фильтрации данных в файле excel, обычно мы делаем это через встроенный в программу фильтр, но бывают ситуации, когда нужно осуществить отбор строк по большому количеству условий (в нашем случае – по ключевым словам) сразу по нескольким столбцам.
Рассмотрим задачу более подробно. Например, у нас есть файл excel с обращениями клиентов в банк (тысячи строк), который содержит следующие колонки: «ИНН клиента», «Дата обращения», «Обращение», «Решение». В столбце «Обращение» содержится текст обращения клиента, в столбце «Решение» — ответ банка на обращение. Суть обращений может быть абсолютно любой (кредитование, страхование, эквайринг и т.д).
Требуется с помощью поиска ключевых слов/сочетаний слов (например, «КАСКО», «ОСАГО», «автострахов», «залог…авто» и т.п.) в колонках «Обращение» и «Решение» выбрать обращения клиентов, которые относятся к страхованию автотранспорта. Нужные слова могут содержаться как в обоих столбцах, так и в одном из них.
Конечно, можно начать фильтровать данные колонки в excel, но это будет долго и трудоёмко, особенно, если слов для поиска подходящих обращений много (или столбцов, в которых необходимо найти ключевые слова). Поэтому для решения нашей задачи требуется более удобный инструмент – Python.
Ниже представлен код, с помощью которого мы отберем необходимые обращения клиентов:
# Импорт библиотек. import pandas as pd import numpy as np import re #Чтение исходного файла с данными. df = pd.read_excel(r’ПУТЬ К ФАЙЛУ\Название исходного файла с данными.xlsx’, dtype=’str’) # Регулярные выражения. # Шаблон (слова/сочетания слов, которые необходимо найти в столбцах). r = r'(каско)|(осаго)|(страх.*?транспорт)|(транспорт.*?страх)|(страх.*?авто)|(авто.*?страх)|(залог.*?транспорт)|(транспорт.*?залог)|(залог.*?авто)|(авто.*?залог)|(автострахов)’
Поясним, что «.*?» в выражении (страх.*?транспорт) ищет между «страх» и «транспорт» любое количество символов, вопросительный знак отключает жадность алгоритма поиска (поиск заканчивается как только находится первый «транспорт»).
#Для каждой строки ищем шаблон в столбце «Обращение». obr = df[‘Обращение’].apply(lambda x: re.search(r, str(x).lower())) #другой вариант: obr = df[‘ Обращение ‘].str.lower().str.contains(r) #Для каждой строки ищем шаблон в столбце «Решение». otvet = df[‘Решение’].apply(lambda x: re.search(r, str(x).lower())) #другой вариант: otvet = df[‘Решение’].str.lower().str.contains(r) #Для каждой строки проверяем наличие шаблона хотя бы в одном из столбцов «Обращение» и «Решение» (результат — True/False). itog = np.any(np.array([~obr.isnull(), ~otvet.isnull()]), axis=0) #Результат (оставляем только те строки в таблице, по которым получен результат True). new_df = df[itog] #Запись результата в excel. new_df.to_excel(‘Название итогового файла.xlsx’, index=False)
В результате получаем новый файл excel, в который полностью скопированы нужные нам обращения клиентов:
— в обращении клиента с ИНН 1111111111 в столбцах «Обращение» и «Решение» содержится слово «КАСКО»;
— в обращении клиента с ИНН 333333333333 в столбце «Решение» содержатся сочетания слов «залог…транспорт», «транспорт…страх», «залог…авто», «страх…авто»;
— в обращении клиента с ИНН 444444444444 в столбце «Обращение» содержатся сочетания слов «страх…транспорт»; «транспорт…залог».
Количество столбцов, в которых можно производить поиск ключевых слов, не ограничен – в приведенном примере их два, но у вас может быть больше.
При необходимости для каждого столбца можно задать свой шаблон для поиска слов:
#Шаблон 1 для столбца «Обращение». r1= r'(каско)|(осаго)|(страх.*?транспорт)|(транспорт.*?страх)|(страх.*?авто)|(авто.*?страх)’ #Шаблон 2 для столбца «Решение». r2= r'(залог.*?транспорт)|(транспорт.*?залог)|(залог.*?авто)|(авто.*?залог)|(автострахов)’ #Поиск шаблонов 1 и 2 в столбцах «Обращение» и «Решение» соответственно. obr = df[‘Обращение’].apply(lambda x: re.search(r1, str(x).lower())) otvet = df[‘Решение’].apply(lambda x: re.search(r2, str(x).lower()))
Если требуется выбрать строки, в которых ключевые слова содержатся и в том, и в другом столбце, то нужно заменить функцию any() на all():
itog = np.all(np.array([~obr.isnull(), ~otvet.isnull()]), axis=0)
Теперь рассмотрим ситуацию, когда у нас имеется несколько файлов excel с обращениями клиентов (с аналогичной структурой столбцов), и необходимо в каждом выбрать подходящие обращения.
Тогда код, с помощью которого мы отберем нужные строки, будет выглядеть так:
#Импорт библиотек. import pandas as pd import numpy as np import os import re import warnings #Игнорирование всех предупреждений. warnings.filterwarnings(‘ignore’) #Путь к папке с исходными файлами. path = r’ПУТЬ К ПАПКЕ С ФАЙЛАМИ ‘ #Регулярные выражения. #Шаблон (слова/сочетания слов, которые необходимо найти в столбцах). r= r'(каско)|(осаго)|(страх.*?транспорт)|(транспорт.*?страх)|(страх.*?авто)|(авто.*?страх)|(залог.*?транспорт)|(транспорт.*?залог)|(залог.*?авто)|(авто.*?залог)|(автострахов)’ #Создание папки, в которую будут сохраняться файлы с нужными обращениями. os.makedirs(‘Нужные обращения’, exist_ok=True) #Получение списка полных имён для всех файлов xlsx в папке с исходными файлами. docs = [] for root, _, files in os.walk(path): for file in files: if file.split(‘.’)[-1] == ‘xlsx’: docs.append(os.path.join(root, file)) print(f’В директории
В результате создается папка «Нужные обращения», в которой содержатся новые файлы excel с полностью скопированными нужными обращениями клиентов. По количеству и названию данные файлы соответствуют исходным.
Таким образом, благодаря Python поиск строк в файлах по ключевым словам в столбцах становится быстрым и несложным делом. Приведенный код значительно ускоряет и упрощает работу аналитика в части фильтрации строк по большому количеству условий по нескольким столбцам.
Как сделать поиск по тексту по нескольким словам на Python?
Добрый день, может кто знает, как можно организовать поиск в предложении по нескольким словами в python. Например у нас есть предложение «Возможно ли нам встретиться сегодня утром?» пользователь водит «встретиться сегодня» и данное предложение должно попасть в условный список. Как можно организовать такой поиск? Как я понял мне нужно двигаться в сторону регулярок, но куда именно, пока не понял.
- Вопрос задан более года назад
- 487 просмотров
3 комментария
Простой 3 комментария

Вам надо хоть какой-нибудь код написать самостоятельно. Хоть попытайтесь.
«встретиться сегодня» это как раз одно слово, то есть один объект типа строка, и это ищется как
if "встретиться сегодня" in "Возможно ли нам встретиться сегодня утром?"
Если ввод пользователя будет в таком виде, нужно разбивать строку на слова
Проверку вхождения всех элементов, при том, что их число заранее неизвестно, можно сделать через список, где на каждой позиции — порядковом номере соответствующего элемента будет True или False.
1. «встретиться сегодня» — разбить на слова, сделать список из слов
2. создать пустой выходной список
3. обходить список из слов, проверять каждое слово на вхождение, результат True или False добавлять к выходному списку
Daniil2411 @Daniil2411 Автор вопроса
PavelMos, проблема в том что, при таком раскладе if ‘нет арбуз’ in ‘нет арбуза’
это будет считаться как True, а мне нужен именно строгий поиск.
Поиск всех вхождений подстроки в строке в Python
В Python есть несколько способов поиска подстроки в строке. Например, можно использовать методы find() и rfind() , которые возвращают индекс первого вхождения подстроки и индекс последнего вхождения подстроки соответственно.
Пример
s = "Привет, мир! Мир - прекрасен" print(s.find('мир')) # 8 print(s.rfind('мир')) # 13
Однако, эти методы не предоставляют информации обо всех вхождениях подстроки в строку. Например, если необходимо найти все вхождения слова «мир» в предложении «Привет, мир! Мир — прекрасен», то find() и rfind() не смогут с этим справиться.
В этом случае можно использовать регулярные выражения или цикл для прохождения по строке и поиска всех вхождений подстроки.
Использование регулярных выражений
Модуль re в Python предоставляет функцию finditer() , которая возвращает итератор, содержащий все вхождения подстроки в строке.
Пример
import re s = "Привет, мир! Мир - прекрасен" matches = re.finditer('мир', s) indices = [match.start() for match in matches] print(indices) # [8, 13]
Использование цикла
Можно использовать цикл и метод find() для поиска всех вхождений подстроки в строке.
Пример
s = "Привет, мир! Мир - прекрасен" substring = 'мир' indices = [] index = -1 # начинаем поиск с начала строки while True: # находим следующее вхождение подстроки index = s.find(substring, index + 1) # если вхождение не найдено, выходим из цикла if index == -1: break # добавляем индекс в список indices.append(index) print(indices) # [8, 13]
Таким образом, с помощью регулярных выражений или цикла можно найти все вхождения подстроки в строке.
