поиск пар слов в тексте по ключевому слову
from collections import Counter
def find_word_pairs(filename, search_word, root):
# Читаем файл и получаем текст
with open(filename, 'r', encoding='utf-8') as file:
text = file.read()
# Регулярное выражение для поиска слов с корнем
pattern = re.compile(r'\b\w*' + re.escape(root) + r'\w*\b', re.UNICODE)
# Находим все слова с корнем
words_with_root = pattern.findall(text)
# Разбиваем текст на слова
words = text.split()
# Список пар соседних слов
pairs = []
# Ищем соседние слова
for i in range(len(words) - 1):
if words[i] in words_with_root or words[i + 1] in words_with_root:
pairs.append((words[i], words[i + 1]))
# Считаем частоту пар
pair_counts = Counter(pairs)
# Сортируем пары по частоте
sorted_pairs = pair_counts.most_common()
return sorted_pairs
def main():
filename = 'фразы.txt'
search_word = input("Введите слово поиска: ")
root = search_word[:-1] # Предполагаем, что корень - это слово без последней буквы
# Получаем и выводим результат
sorted_pairs = find_word_pairs(filename, search_word, root)
for (pair, count) in sorted_pairs:
print(f"{pair[0]} {pair[1]}: {count}")
if __name__ == "__main__":
main()
вывод найденных пар слов ->
Введите слово поиска: просто
не просто: 232
просто так: 208
это просто: 203
так просто: 195
просто не: 125
просто -: 105
нужно просто: 91
просто как: 50
- просто: 50
просто понять: 46
ты просто: 41
я просто: 41
или просто: 38
и просто: 38
довольно просто: 34
простые вещи: 34
мы просто: 31
чем просто: 31
просто и: 29
просто это: 25
всё просто: 24
простых людей: 23
в пространстве: 21
нам просто: 21
простых вещей: 21
не простой: 20
достаточно просто: 20
мне просто: 19
пространства и: 18
быть просто: 18
слишком просто: 18
простой ответ: 18
такой простой: 17
простой вопрос: 17
то просто: 17
простых и: 16
простой алгоритм: 16
просто набор: 16
на простых: 15
простые и: 15
это простой: 15
здесь просто: 15
просто осознать: 15
просто в: 14
что просто: 13
достаточно простой: 13
простых фраз: 12
просто нужно: 12
просто так.: 12
просто для: 12
наверно просто: 12
простой и: 12
простым и: 12
просто немного: 12
и простых: 12
просто такая: 11
слишком простой: 11
просто так,: 11
может просто: 10
просто или: 10
просто слова: 10
просто кажется: 10
этого просто: 10
простыми и: 10
просто сделать: 10
происходит просто: 9
пространстве и: 9
простая мысль: 9
этих простых: 9
простой подход: 9
простые люди: 9
уровне простых: 9
такая простая: 9
чтобы просто: 9
просто всё: 9
простое и: 9
просто нет: 9
просто мы: 9
меня просто: 9
просто на: 9
а просто: 8
просто какая: 8
просто я: 8
просто скажи: 8
нужен простой: 8
просто нам: 8
она просто: 8
просто к: 8
на простые: 8
простые модели: 8
бы просто: 8
более простые: 8
не простая: 8
тебе просто: 7
**
похожий код программы -->
import pymorphy2
from collections import Counter
# Функция для получения корня слова
def get_root(word):
morph = pymorphy2.MorphAnalyzer()
parsed = morph.parse(word)
return parsed[0].normal_form if parsed else None # Возвращаем нормальную форму слова или None
# Функция для чтения текста из файла
def read_text_file(filename):
with open(filename, 'r', encoding='utf-8') as file:
return file.read()
# Функция для поиска пар соседних слов и их частоты
def find_word_pairs(text, root=None):
words = text.split()
# Если корень не задан, просто берем все слова
if root:
# Фильтруем слова по корню
filtered_words = [word for word in words if get_root(word) == root]
else:
filtered_words = words # Если корень не найден, используем все слова
# Создаем пары соседних слов
pairs = list(zip(filtered_words, filtered_words[1:]))
# Считаем частоту пар
pair_counts = Counter(pairs)
return pair_counts
# Основная часть программы
def main():
# Вводим слово
input_word = input("Введите русское слово: ")
root = get_root(input_word)
# Читаем текст из файла
text = read_text_file('фразы.txt')
# Находим пары слов и их частоту
if root:
print(f"Корень слова: {root}")
pair_counts = find_word_pairs(text, root)
else:
print("Не удалось извлечь корень. Ищем пары слов без фильтрации по корням.")
pair_counts = find_word_pairs(text)
# Сортируем пары по частоте sorted_pairs = pair_counts.most_common()
# Выводим результат
for pair, count in sorted_pairs:
print(f"Пара: {pair}, Частота: {count}")
if __name__ == "__main__":
main()
-------------------------------------------->
import pymorphy2
from collections import Counter
from itertools import zip
# Функция для получения корня слова
def get_root(word):
morph = pymorphy2.MorphAnalyzer()
parsed = morph.parse(word)
return parsed[0].normal_form if parsed else None # Возвращаем нормальную форму слова или None
# Функция для чтения текста из файла
def read_text_file(filename):
with open(filename, 'r', encoding='utf-8') as file:
return file.read()
# Функция для поиска пар соседних слов и их частоты
def find_word_pairs(text, root=None):
words = text.split()
# Если корень не задан, просто берем все слова
if root:
# Фильтруем слова по корню filtered_words = [word for word in words if get_root(word) == root]
else:
filtered_words = words # Создаем пары соседних слов
pairs = list(zip(filtered_words, filtered_words[1:]))
# Считаем частоту пар pair_counts = Counter(pairs)
return pair_counts
# Основная часть программы
def main():
# Вводим слово
input_word = input("Введите русское слово: ")
root = get_root(input_word)
# Читаем текст из файла
text = read_text_file('фразы.txt')
# Находим пары слов и их частоту
if root:
print(f"Корень слова: {root}")
pair_counts = find_word_pairs(text, root)
else:
print("Не удалось извлечь корень. Ищем пары слов без фильтрации по корням.")
pair_counts = find_word_pairs(text)
# Сортируем пары по частоте sorted_pairs = pair_counts.most_common()
# Выводим результат
for pair, count in sorted_pairs:
print(f"Пара: {pair}, Частота: {count}")
if __name__ == "__main__":
main()
-------------------------------------------->
import pymorphy2
from collections import Counter
# Функция для получения корня слова
def get_root(word):
morph = pymorphy2.MorphAnalyzer()
parsed = morph.parse(word)
return parsed[0].normal_form if parsed else None # Возвращаем нормальную форму слова или None
# Функция для чтения текста из файла
def read_text_file(filename):
with open(filename, 'r', encoding='utf-8') as file:
return file.read()
# Функция для поиска пар соседних слов и их частоты
def find_word_pairs(text, root=None):
words = text.split()
# Если корень не задан, просто берем все слова
if root:
# Фильтруем слова по корню
filtered_words = [word for word in words if get_root(word) == root]
else:
filtered_words = words # Если корень не найден, используем все слова # Создаем пары соседних слов
pairs = list(zip(filtered_words, filtered_words[1:]))
# Считаем частоту пар pair_counts = Counter(pairs)
return pair_counts
# Основная часть программы
def main():
# Вводим слово input_word = input("Введите русское слово: ")
root = get_root(input_word)
# Читаем текст из файла
text = read_text_file('фразы.txt')
# Находим пары слов и их частоту
if root:
print(f"Корень слова: {root}")
pair_counts = find_word_pairs(text, root)
else:
print("Не удалось извлечь корень. Ищем пары слов без фильтрации по корням.")
pair_counts = find_word_pairs(text)
# Сортируем пары по частоте sorted_pairs = pair_counts.most_common()
# Выводим результат
for pair, count in sorted_pairs:
print(f"Пара: {pair}, Частота: {count}")
if __name__ == "__main__":
main()
---------------------------------------------->
алгоритм поиска соседних пар слов в тексте
текст в файле фразы.txt utf-8
input
ввод слова поиска:
хорошо
корень - хорош
список пар найденных слов в тексте
пример для слова с корнем хорош -
хорошо знал
он хороший
так хорош
хорошие слова
хороша душа
мир хороший
это хорошо
что хорошо
хорошенько подумал
хорошие мысли
быть хорошо
ты хорошо
они хороши
хорошие дела
отсортировать пары найденных слов текста по частоте
Для реализации алгоритма поиска соседних пар слов в тексте из файла фразы.txt, который будет работать с заданным корнем слова, можно использовать Python. Вот пример кода, который выполняет эту задачу:
**
import re
from collections import Counter
def find_word_pairs(filename, search_word, root):
# Читаем файл и получаем текст
with open(filename, 'r', encoding='utf-8') as file:
text = file.read()
# Регулярное выражение для поиска слов с корнем pattern = re.compile(r'\b\w*' + re.escape(root) + r'\w*\b', re.UNICODE)
# Находим все слова с корнем
words_with_root = pattern.findall(text)
# Разбиваем текст на слова
words = text.split()
# Список пар соседних слов
pairs = []
# Ищем соседние слова
for i in range(len(words) - 1):
if words[i] in words_with_root or words[i + 1] in words_with_root:
pairs.append((words[i], words[i + 1]))
# Считаем частоту пар pair_counts = Counter(pairs)
# Сортируем пары по частоте sorted_pairs = pair_counts.most_common()
return sorted_pairs
def main():
filename = 'фразы.txt'
search_word = input("Введите слово поиска: ")
root = search_word[:-1] # Предполагаем, что корень - это слово без последней буквы
# Получаем и выводим результат
sorted_pairs = find_word_pairs(filename, search_word, root)
for pair, count in sorted_pairs:
print(f"{pair[0]} {pair[1]}: {count}")
if __name__ == "__main__":
main()
**
Ка работает код:
Чтение файла: Файл фразы.txt читается с использованием кодировки UTF-8.
Поиск слов с корнем: С помощью регулярного выражения ищем все слова, которые содержат указанный корень.
Поиск соседних слов: Проходим по всем словам в тексте и ищем пары соседних слов, где хотя бы одно из слов содержит корень.
Подсчет частоты: Используем Counter из модуля collections для подсчета частоты каждой пары.
Сортировка и вывод: Пары сортируются по частоте и выводятся на экран.
Примечания:
В данном примере предполагается, что корень слова - это слово без последней буквы. Это можно изменить в зависимости от конкретных требований.
Регулярное выражение может быть адаптировано для более сложных случаев, например, для работы с различными окончаниями слов.
Убедитесь, что файл фразы.txt находится в той же директории, что и скрипт, или укажите полный путь к файлу.
ошибка кода -
Traceback (most recent call last):
File "C:\Users\MSI\Desktop\поиск пар слов в тексте.py", line 40, in <module>
main()
File "C:\Users\MSI\Desktop\поиск пар слов в тексте.py", line 35, in main
sorted_pairs = find_word_pairs(filename, search_word, root)
File "C:\Users\MSI\Desktop\поиск пар слов в тексте.py", line 12, in find_word_pairs
words_with_root = pattern.findall(text)
NameError: name 'pattern' is not defined
Ошибка, которую вы видите, возникает из-за того, что переменная pattern не была определена в коде. Давайте исправим это и добавим необходимые части кода. Вот исправленная версия:
import re
from collections import Counter
def find_word_pairs(filename, search_word, root):
# Читаем файл и получаем текст
with open(filename, 'r', encoding='utf-8') as file:
text = file.read()
# Регулярное выражение для поиска слов с корнем
pattern = re.compile(r'\b\w*' + re.escape(root) + r'\w*\b', re.UNICODE)
# Находим все слова с корнем
words_with_root = pattern.findall(text)
# Разбиваем текст на слова
words = text.split()
# Список пар соседних слов
pairs = []
# Ищем соседние слова
for i in range(len(words) - 1):
if words[i] in words_with_root or words[i + 1] in words_with_root:
pairs.append((words[i], words[i + 1]))
# Считаем частоту пар
pair_counts = Counter(pairs)
# Сортируем пары по частоте
sorted_pairs = pair_counts.most_common()
return sorted_pairs
def main():
filename = 'фразы.txt'
search_word = input("Введите слово поиска: ")
root = search_word[:-1] # Предполагаем, что корень - это слово без последней буквы
# Получаем и выводим результат
sorted_pairs = find_word_pairs(filename, search_word, root)
for (pair, count) in sorted_pairs:
print(f"{pair[0]} {pair[1]}: {count}")
if __name__ == "__main__":
main()
Что было исправлено в коде -
Определение pattern:
Добавлено определение переменной pattern с регулярным выражением, которое ищет слова, содержащие указанный корень.
Вывод результата:
В цикле для вывода результата добавлен правильный формат, чтобы отображать пары слов и их частоту нахождения в тексте
Свидетельство о публикации №124102200588