Загрузка данных


import re

class TrieNode:
    def __init__(self):
        self.children = {}
        self.end = False

class Trie:
    def __init__(self):
        self.root = TrieNode()

    def insert(self, word):
        node = self.root
        for ch in word:
            if ch not in node.children:
                node.children[ch] = TrieNode()
            node = node.children[ch]
        node.end = True

    def search(self, word):
        node = self.root
        for ch in word:
            if ch not in node.children:
                return False
            node = node.children[ch]
        return node.end

trie = Trie()

with open(r"C:\Users\dumbb\Desktop\dict_ru.txt", encoding="utf-8") as f:
    for line in f:
        trie.insert(line.strip().lower())

with open(r"C:\Users\dumbb\Desktop\dict_en.txt", encoding="utf-8") as f:
    for line in f:
        trie.insert(line.strip().lower())

with open(r"C:\Users\dumbb\Desktop\warandpeace.txt", encoding="utf-8") as f:
    text = f.read().lower()

words = re.findall(r'\w+', text)

errors = []

for w in words:
    if not trie.search(w):
        errors.append(w)

print("ошибок:", len(errors))
print("первые 20 ошибок:", errors[:20])