Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.72/18: Рейтинг темы: голосов - 18, средняя оценка - 4.72
0 / 0 / 0
Регистрация: 25.12.2017
Сообщений: 3

Анализатор текста

21.02.2019, 21:20. Показов 3989. Ответов 3

Студворк — интернет-сервис помощи студентам
Написал частотный анализ, но не могу понять по какой причине он плохо декриптит текст (за подсчёт частоты не зашифрованных частот брал первый том "Война и мир"

В чём может быть проблема?

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
import re
 
 
def text_analiz(filename):
    dict = {}
    amount = 0
    with open(filename, "r") as file:
        for i in file.read():
            i.lower()
            a = re.sub("[^а-я]", "", i)
            if a not in dict and a != "":
                dict[a] = 0
            if a in dict:
                dict[a] += 1
                amount += 1
        for value in dict:
            a = str(((int(dict.get(value)) / amount) * 100))
            dict.update({value: a})
    return dict
 
 
def create_encryption_dict():
    dict1 = text_analiz("War.txt")
    dict2 = text_analiz("testdec.txt")
    sort1 = sorted(dict1.items(), key=lambda value: float(value[1]))
    sort2 = sorted(dict2.items(), key=lambda value: float(value[1]))
    dict3 = {}
    print(sort1)
    print(sort2)
 
    value = 0
 
    for i in sort1:
        a = (list(sort2)[value])
        dict3.update({a[0]: i[0]})
        value += 1
    print(dict3)
 
    return dict3
 
 
def file_decrytpion(dict):
    decryption = open("Decryption_Text", "w")
    with open("testdec.txt", "r") as file:
        for i in file.read():
            i.lower()
            if i in dict:
                decryption.write(dict.get(i))
            else:
                decryption.write(i)
 
 
def change_chart_from_keyboard(dict):
    default = input("Введите букву которую хотите заменить: ").lower().split()
    changed = input("Введите букву на которую хотите заменить: ").lower().split()
    if default or changed not in dict:
        print("Неверно введённый символ")
    else:
        dict.update({default[0]: changed[0]})
    file_decrytpion(dict)
 
 
dict = create_encryption_dict()
file_decrytpion(dict)
 
flag = input("Нужно ли заменить букву? Да/Нет ")
 
while flag:
    if flag == "Да":
        change_chart_from_keyboard(dict)
    else:
        flag = False
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
21.02.2019, 21:20
Ответы с готовыми решениями:

Анализатор звука
Здравствуйте! Есть ли программа,которая бы слушала уровень сигнала, поступающего со звуковой карты (с микрофона) и выдавала бы значение...

Логический анализатор
У меня стоит учебная задача построения логического анадизатора строк на Python. Программа должна принимать строку вида ...

Частотный анализатор слов
Нужно подсчитать сколько раз слово встречается в тексте. Нашел весьма лаконичный код from collections import Counter import re words...

3
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
21.02.2019, 23:27
А что вы, собственно, делаете? Только, пожалуйста, без употребления несуществующих терминов типа "декриптит".
Опишите смысл вашего кода так, как вы бы объясняли собственной бабушке.
Тогда может быть и сами лучше его поймете.

P.S. dict это существующий Python тип\класс. Не нужно его использовать как имя переменной.
0
0 / 0 / 0
Регистрация: 25.12.2017
Сообщений: 3
22.02.2019, 12:21  [ТС]
Анализирую кол-во букв в обычном тексте (брал войну и мир), анализирую кол-во букв в зашифрованном тексте,(п3) сортирую словари по частоте значений букв, меняю местами буквы для расшифровки (зашифрованный = не зашифрованный (по частоте)), подставляю в зашифрованный текст словарь из п3
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
22.02.2019, 13:09
Цитата Сообщение от Daniil181 Посмотреть сообщение
Анализирую кол-во букв в обычном тексте
Как-то странно анализируете.
Подсчет частот в Python делается при помощи класса Counter.

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
from pprint import pprint
from collections import Counter
import re 
 
def counter(filepath,alphabet):
    with open(filepath, "r") as f:
        text = f.read().lower()
 
    counter_letters = Counter(dict.fromkeys(alphabet,0))
    find_letters = re.findall(r'[а-я]',text)
    counter_letters.update(Counter(find_letters))
    
    return counter_letters
 
if __name__ == "__main__":
    filepath = r"voina_i_mir.t1.txt"
    cyrillic = [chr(i) for i in range(ord('а'), ord('я') + 1)]
    cyrillic.insert(6,'ё')
    letters = counter(filepath,cyrillic)
    pprint(letters)


P.S. Все остальное в вашем коде для меня лишено смысла, поэтому не комментирую.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
22.02.2019, 13:09
Помогаю со студенческими работами здесь

Лексический анализатор
Составить программу реализации арифметического выражения. Написать программу-анализатор, которая определяет объём исходной программы, где: ...

Лексический анализатор
На вход программе подается текстовый файл с программным кодом на C. Нужно написать программу, которая переведет этот код в SMT-формулу...

Анализатор формулы рекурсия
Дан некоторый текст, за которым следует точка (в сам текст точка не входит). Определить программно, является ли текст правильной записью ...

Анализатор текста
Создать страницу с формой, которая будет принимать текст. Добавить валидацию длины текста, если длина больше 1024 символов, то такой текст...

Анализатор текста
Доброго времени суток! Подскажите плз толковый анализатор текста, встраиваемый в яву. Что хочу сделать-есть БД, в 1 столбце ИДшники, во...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru