поиск нужной фразы в тексте по частоте слов
from collections import Counter
import os
def load_phrases(filename):
if not os.path.exists(filename):
return []
with open(filename, 'r', encoding='utf-8') as f:
return [line.strip() for line in f.readlines()]
def save_phrase(filename, phrase):
with open(filename, 'a', encoding='utf-8') as f:
f.write(phrase + '\n')
def count_word_frequencies(phrases):
words = []
for phrase in phrases:
words.extend(re.findall(r'\b\w+\b', phrase.lower()))
return Counter(words)
def find_least_frequent_word(phrase, word_freq):
words = re.findall(r'\b\w+\b', phrase.lower())
min_freq = min(word_freq[word] for word in words)
least_frequent_words = [word for word in words if word_freq[word] == min_freq]
return least_frequent_words[0] if least_frequent_words else None
def find_similar_phrase(phrases, word):
base_word = re.sub(r'\W+', '', word)
for phrase in phrases:
if base_word in phrase.lower():
return phrase
return None
def main():
filename = 'фразы.txt'
phrases = load_phrases(filename)
word_freq = count_word_frequencies(phrases)
while True:
new_phrase = input("Вы: ").strip()
if new_phrase in phrases:
print("фраза уже существует")
continue
save_phrase(filename, new_phrase)
phrases.append(new_phrase)
word_freq = count_word_frequencies(phrases)
least_frequent_word = find_least_frequent_word(new_phrase, word_freq)
if least_frequent_word:
similar_phrase = find_similar_phrase(phrases, least_frequent_word)
if similar_phrase:
print(f"бот: {similar_phrase}")
else:
print("Нет такой фразы")
else:
print("Нет слов для анализа.")
if __name__ == "__main__":
main()
**
есть набор фраз в файле фразы txt utf-8
нужно посчитать частоту всех слов
и найти в каждой фразе слова с наименьшей частотой
вводим фразу через input и добавляем её в наш файл с фразами
программа в этой фразе также находит самое редкое слово по частоте
и выводит фразу из файла с таким же словом по частоте без учёта его окончания
далее вводим новую фразу и получаем новый ответ и так далее
при этом фразы ввода и вывода не должны повторяться
import random
def load_phrases(file_path):
with open(file_path, 'r', encoding='utf-8') as file:
phrases = file.readlines()
return [phrase.strip() for phrase in phrases]
def save_phrase(file_path, phrase):
with open(file_path, 'a', encoding='utf-8') as file:
file.write(phrase + '\n')
def find_similar_phrases(input_phrase, phrases):
input_words = set(input_phrase.split())
similar_phrases = [
phrase for phrase in phrases
if any(word in phrase.split() for word in input_words)
]
return similar_phrases[:25]
def get_random_phrase(similar_phrases, input_phrase):
if not similar_phrases:
return None
# Фильтруем фразы, чтобы не повторять вводимую фразу
filtered_phrases = [phrase for phrase in similar_phrases if phrase != input_phrase]
if not filtered_phrases:
return None
# Находим фразу, длина которой примерно равна длине вводимой
target_length = len(input_phrase)
closest_phrase = min(filtered_phrases, key=lambda x: abs(len(x) - target_length))
return closest_phrase
def main():
file_path = 'фразы.txt'
phrases = load_phrases(file_path)
while True:
user_input = input("вы: ")
if user_input.lower() in ['выход', 'exit']:
break
# Сохраняем введённую фразу в файл
save_phrase(file_path, user_input)
# Находим похожие фразы
similar_phrases = find_similar_phrases(user_input, phrases)
# Получаем случайную фразу
bot_response = get_random_phrase(similar_phrases, user_input)
if bot_response:
print(f"бот: {bot_response}")
else:
print("бот: Извините, я не нашёл подходящей фразы.")
if __name__ == "__main__":
main()
**
есть набор фраз в файле фразы txt utf-8
мы вводим новую фразу через input и добавляем её в наш файл
находим фразы файла в которых есть хотя бы одно слово из фразы ввода
всего находим не более 25 таких фраз
выбираем одну из этих фраз которая по длине примерно как наша фразе ввода
и выводим её как ответ
далее вводим новую фразу input - и так далее по циклу while
проверяем чтобы фраза вывода не повторяла фразы ввода
Свидетельство о публикации №124121607468