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])