логарифмы и логика выбора ответа фраз
import math
import re
# Функция для чтения фраз из файла
def read_phrases(filename):
with open(filename, 'r') as file:
phrases = file.readlines()
phrases = [phrase.strip() for phrase in phrases]
return phrases
# Функция для расчета логарифмической вероятности
def log_probability(phrase, context):
frequency = context.count(phrase)
total = len(context)
probability = frequency / total
return math.log(probability) if probability > 0 else -math.inf
# Функция для выбора фразы на основе логарифмической оценки
def choose_phrase(phrases, context):
best_phrase = None
best_log_prob = -math.inf
for phrase in phrases:
log_prob = log_probability(phrase, context)
if log_prob > best_log_prob:
best_log_prob = log_prob
best_phrase = phrase
return best_phrase
# Основная программа
def main():
filename = 'phrases.txt'
phrases = read_phrases(filename)
context = input("Введите контекст: ")
context = re.findall(r'\b\w+\b', context.lower())
best_phrase = choose_phrase(phrases, context)
print("Выбранная фраза:", best_phrase)
if __name__ == "__main__":
main()
Эта программа читает фразы из файла phrases.txt, запрашивает контекст у пользователя и выбирает фразу на основе логарифмической оценки. Контекст разбивается на отдельные слова, и для каждой фразы рассчитывается логарифмическая вероятность. Фраза с наибольшей логарифмической вероятностью выбирается как наиболее подходящая.
Примечания:
Файл phrases.txt должен содержать фразы, разделенные переносами строк.
Контекст вводится через input и разбивается на отдельные слова с помощью регулярного выражения.
Логарифмическая вероятность рассчитывается с помощью функции math.log. Если вероятность равна 0, логарифмическая вероятность устанавливается в -math.inf.
Фраза с наибольшей логарифмической вероятностью выбирается как наиболее подходящая.
Вы можете изменить программу в соответствии с вашими потребностями. Например, вы можете добавить более сложную обработку контекста или использовать другие методы для расчета логарифмической вероятности.
теперь сделай из этого чат с циклом вывода фраз
Для того чтобы изменить программу на чат с циклом вывода новых фраз и запросов, а также для сохранения запросов в файле данных, вам потребуется внести несколько изменений. Вот модифицированный код:
import math
import re
# Функция для чтения фраз из файла
def read_phrases(filename):
with open(filename, 'r') as file:
phrases = file.readlines()
phrases = [phrase.strip() for phrase in phrases]
return phrases
# Функция для расчета логарифмической вероятности
def log_probability(phrase, context):
frequency = context.count(phrase)
total = len(context)
probability = frequency / total
return math.log(probability) if probability > 0 else -math.inf
# Функция для выбора фразы на основе логарифмической оценки
def choose_phrase(phrases, context):
best_phrase = None
best_log_prob = -math.inf
for phrase in phrases:
log_prob = log_probability(phrase, context)
if log_prob > best_log_prob:
best_log_prob = log_prob
best_phrase = phrase
return best_phrase
# Функция для сохранения запросов
def save_request(query, filename):
with open(filename, 'a') as file:
file.write(query + '\n')
# Основная программа
def main():
filename = 'phrases.txt'
data_filename = 'queries.txt'
phrases = read_phrases(filename)
while True:
context = input("Введите контекст (или 'exit' для выхода): ")
if context.lower() == 'exit':
break
context_words = re.findall(r'\b\w+\b', context.lower())
best_phrase = choose_phrase(phrases, context_words)
print("Выбранная фраза:", best_phrase)
save_request(context, data_filename)
print("Запрос сохранен.")
print("Программа завершена.")
if __name__ == "__main__":
main()
Этот код добавляет цикл, который будет продолжаться до тех пор, пока пользователь не введет "exit".
В каждой итерации цикла программа запрашивает контекст у пользователя, выбирает наиболее подходящую фразу на основе логарифмической оценки, выводит её и сохраняет запрос в файле queries.txt.
покажи как программа выбирает нужную фразу из шести фраз
Конечно, давайте добавим несколько фраз в файл phrases.txt и проведем демонстрацию, как программа выбирает наиболее подходящую фразу на основе контекста. Вот пример фраз, которые могут быть в файле phrases.txt:
Доброе утро
Как дела?
Что нового?
Прекрасная погода сегодня
Увидимся позже
До свидания
Теперь рассмотрим контекст и как программа выбирает фразу.
Пример кода для демонстрации:
import math
import re
# Функция для чтения фраз из файла
def read_phrases(filename):
with open(filename, 'r') as file:
phrases = file.readlines()
phrases = [phrase.strip() for phrase in phrases]
return phrases
# Функция для расчета логарифмической вероятности
def log_probability(phrase, context):
frequency = context.count(phrase)
total = len(context)
probability = frequency / total
return math.log(probability) if probability > 0 else -math.inf
# Функция для выбора фразы на основе логарифмической оценки
def choose_phrase(phrases, context):
best_phrase = None
best_log_prob = -math.inf
for phrase in phrases:
log_prob = log_probability(phrase, context)
if log_prob > best_log_prob:
best_log_prob = log_prob
best_phrase = phrase
return best_phrase
# Функция для сохранения запросов
def save_request(query, filename):
with open(filename, 'a') as file:
file.write(query + '\n')
# Основная программа
def main():
filename = 'phrases.txt'
data_filename = 'queries.txt'
phrases = read_phrases(filename)
while True:
context = input("Введите контекст (или 'exit' для выхода): ")
if context.lower() == 'exit':
break
context_words = re.findall(r'\b\w+\b', context.lower())
best_phrase = choose_phrase(phrases, context_words)
print("Выбранная фраза:", best_phrase)
save_request(context, data_filename)
print("Запрос сохранен.")
print("Программа завершена.")
if __name__ == "__main__":
main()
Демонстрация
Запустите программу.
Введите контекст, например: "Как у тебя дела?"
Контекст: "Как у тебя дела?"
Фраза 1: "Доброе утро" - не встречается в контексте.
Фраза 2: "Как дела?" - частично совпадает с контекстом.
Фраза 3: "Что нового?" - не встречается в контексте.
Фраза 4: "Прекрасная погода сегодня" - не встречается в контексте.
Фраза 5: "Увидимся позже" - не встречается в контексте.
Фраза 6: "До свидания" - не встречается в контексте.
Фраза "Как дела?" имеет наибольшую вероятность, так как слова "как" и "дела" присутствуют в контексте. Поэтому программа выберет эту фразу.
Запуск программы:
Введите контекст (или 'exit' для выхода): Как у тебя дела?
Выбранная фраза: Как дела?
Запрос сохранен.
Таким образом, программа проанализировала контекст, рассчитала логарифмическую вероятность для каждой фразы и выбрала ту, которая лучше всего подходит.
Свидетельство о публикации №124080800282