Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Помогите с лабораторной работой по Теории информации, нужен код в программе Python!

Татьяна Якушова Ученик (91), на голосовании 5 дней назад
Напишите программу на языке программирования Python,
выполняющую следующие действия:
  • чтение текстового сообщения из файла;
  • расчет статистических показателей текста;
  • вывод результатов на экран, в том числе в графическом виде.
Программа должна выполнять следующие функции:
  • Рассчитывать вероятность каждого символа в алфавите сообщения:
алфавит сообщения может быть задан в программе изначально (например,
алфавит русского языка) или формироваться при обработке сообщения.
  • Рассчитывать собственную информацию каждого символа в алфавите.
  • Вычислять значения максимальной и реальной энтропии сообщения, а
так же избыточность.
  • Выводить на экран: символы с наибольшей и наименьшей собственной
информацией; значения максимальной энтропии, реальной энтропии и
избыточности; график распределения вероятности появления символов по
алфавиту в виде гистограммы распределения

И результат в виде скриншота работы кода. В качестве примера текста пусть будет Эдуард Асадов — Стихи о рыжей дворняге
Голосование за лучший ответ
Твой Профессор Мастер (1939) 1 месяц назад
  
import matplotlib.pyplot as plt
from collections import Counter
import math

# чтение текстового сообщения из файла
def read_text_from_file(filename):
with open(filename, 'r', encoding='utf-8') as file:
text = file.read()
return text

# расчет статистических показателей текста
def calculate_probabilities(text):
total_chars = len(text)
char_counts = Counter(text)
probabilities = {char: count / total_chars for char, count in char_counts.items()}
return probabilities

# расчет собственной информации
def calculate_self_information(probabilities):
self_info = {char: -math.log2(p) for char, p in probabilities.items()}
return self_info

# расчет энтропии
def calculate_entropy(probabilities):
entropy = -sum(p * math.log2(p) for p in probabilities.values() if p > 0)
return entropy

# расчет максимальной энтропии
def calculate_max_entropy(alphabet_size):
return math.log2(alphabet_size)

# расчета избыточности
def calculate_redundancy(max_entropy, real_entropy):
return max_entropy - real_entropy

# основная функция
def main():
filename = 'text.txt' # Имя файла с текстом
text = read_text_from_file(filename)

text = text.replace('\\n', '').replace(' ', '')

# вероятности
probabilities = calculate_probabilities(text)

# собственная информация
self_info = calculate_self_information(probabilities)

# реальная энтропия
real_entropy = calculate_entropy(probabilities)

# максимальная энтропии
alphabet_size = len(probabilities)
max_entropy = calculate_max_entropy(alphabet_size)

# избыточность
redundancy = calculate_redundancy(max_entropy, real_entropy)

# вывод
print("Символы с наибольшей собственной информацией:")
sorted_self_info = sorted(self_info.items(), key=lambda x: x[1], reverse=True)
for char, info in sorted_self_info[:5]:
print(f"Символ: '{char}', Собственная информация: {info:.4f} бит")

print("\\nСимволы с наименьшей собственной информацией:")
for char, info in sorted_self_info[-5:]:
print(f"Символ: '{char}', Собственная информация: {info:.4f} бит")

print(f"\\nМаксимальная энтропия: {max_entropy:.4f} бит")
print(f"Реальная энтропия: {real_entropy:.4f} бит")
print(f"Избыточность: {redundancy:.4f} бит")

# гистограмма распределения вероятностей
chars = list(probabilities.keys())
probs = list(probabilities.values())

plt.figure(figsize=(10, 6))
plt.bar(chars, probs)
plt.xlabel('Символы')
plt.ylabel('Вероятность')
plt.title('Распределение вероятности появления символов')
plt.show()

if __name__ == "__main__":
main()
Похожие вопросы