кодировщик слов текста ии
текст = текс
пример = прим
так = та
толи = тол
и так далее..
а числа добавляем когда
у нас начинаются повторы кодируемых слов
например:
верно = верн
верна = верн1
и так далее
я понял -
будем брать первые 4 буквы (или меньше, если слово короче),
и добавлять номера к слову только при повторениях их кодов:
```python
import re
from collections import defaultdict
class WordEncoder:
def __init__(self):
self.word_to_code = {}
self.code_counter = defaultdict(int)
self.used_codes = set()
def encode_word(self, word):
"""Кодирует слово: первые 4 буквы (или меньше)"""
# Берем первые 4 буквы, если слово длиннее 4 букв
if len(word) > 4:
base_code = word[:4]
else:
base_code = word
# Проверяем, использовался ли уже такой код
if base_code in self.used_codes:
# Ищем свободный номер
counter = 1
while f"{base_code}{counter}" in self.used_codes:
counter += 1
final_code = f"{base_code}{counter}"
self.used_codes.add(final_code)
return final_code
else:
self.used_codes.add(base_code)
return base_code
def encode_text(self, text):
"""Кодирует весь текст"""
# Разбиваем текст на слова и знаки препинания
tokens = re.findall(r'\w+|[^\w\s]', text)
encoded_tokens = []
for token in tokens:
if token.isalpha(): # Если это слово
encoded_token = self.encode_word(token.lower())
self.word_to_code[token] = encoded_token
encoded_tokens.append(encoded_token)
else: # Если это знак препинания
encoded_tokens.append(token)
return ''.join(encoded_tokens)
def get_encoding_table(self):
"""Возвращает таблицу соответствия слов и кодов"""
return self.word_to_code
def main():
# Чтение текста из файла
try:
with open('input.txt', 'r', encoding='utf-8') as file:
text = file.read().strip()
except FileNotFoundError:
print("Файл 'ввод.txt' не найден!")
return
if not text:
print("Файл пустой!")
return
# Создаем кодировщик и кодируем текст
encoder = WordEncoder()
encoded_text = encoder.encode_text(text)
# Выводим результаты
print("Исходный текст:")
print(text)
print("\nЗакодированный текст:")
print(encoded_text)
print("\nТаблица соответствия:")
for word, code in encoder.get_encoding_table().items():
print(f"{word} -> {code}")
# Сохраняем результат в файл
with open('encoded.txt', 'w', encoding='utf-8') as file:
file.write(encoded_text)
print("\nРезультат сохранен в файл 'encoded.txt'")
# Тестовые примеры
def test_examples():
encoder = WordEncoder()
test_words = [
"текст", "пример", "так", "толи",
"верно", "верна", "верный", "верность"
]
print("Тестовые примеры:")
for word in test_words:
code = encoder.encode_word(word)
print(f"{word} -> {code}")
if __name__ == "__main__":
main()
print("\n" + "="*50)
test_examples()
```
Пример работы:
Создайте файл `ввод.txt` с текстом:
```
текст пример так толи верно верна верный верность программирование разработка
```
Результат кодировки слов:
```
Исходный текст:
текст пример так толи верно верна верный верность программирование разработка
Закодированный текст:
текс прим та тол верн верн1 верн2 верн3 прог разр
Таблица соответствия:
текст -> текс
пример -> прим
так -> та
толи -> тол
верно -> верн
верна -> верн1
верный -> верн2
верность -> верн3
программирование -> прог
разработка -> разр
Тестовые примеры:
текст -> текс
пример -> прим
так -> та
толи -> тол
верно -> верн
верна -> верн1
верный -> верн2
верность -> верн3
```
Как работает код:
Берет первые 4 буквы слова
Если слово короче 4 букв - берет всё слово
Если код уже использовался - добавляет номер
( верн1, верн2 и т.д.)
Сохраняет пунктуацию и пробелы
Свидетельство о публикации №125082302068