
text = """
OUR_TEXT
"""
res = 0
for i in range(1, len(text)-2): #вычитаем длину нашего слова, которое мы ищем
if text[i] == "т":
if text[i+1] == "о":
if (text[i-1] == ' ' or text[i-1] == ',' or text[i-1] == '.') and ((text[i+2] == "…") or (text[i+2] == ' ') or (text[i+2] == '.') or (text[i+2] == ',') or (text[i+2] == '?') or (text[i+2] == '!') or (text[i+2] == ':')):
res += 1
print(text[i - 1] + text[i] + text[i + 1] + text[i + 2]) № просто выводим и зрительно анализируем, чтобы оно не накосячило
print(res) #197, как и должно быть
text = """TEXT"""
res = 0
for i in range(1, len(text)-2):
if text[i] == "т": # можем еще добавить or text[i] == "Т" если регистр первой буквы не принципиален
if text[i+1] == "о":
if (text[i-1] == ' ' or text[i-1] == ',' or text[i-1] == '.') and ((text[i+2] == "…") or (text[i+2] == ' ') or (text[i+2] == '.') or (text[i+2] == ',') or (text[i+2] == '?') or (text[i+2] == '!') or (text[i+2] == ':')):
continue #тут мы скипаем, если не хотим, чтобы отдельные слова считались
else:
res += 1
print(text[i - 1] + text[i] + text[i + 1] + text[i + 2])
print(res)
Короче хз, можно модифицировать, но это прям база и большинство штук, которых в тексте 200+ и их посчитать вручную = мазохизм, то этот алгоритм упрощает жизнь

text = """
ТЕКСТ ПЕРВОЙ ГЛАВЫ, Я НЕ БУДУ ЭТО ПИСАТЬ ЗДЕСЬ ИНАЧЕ МЕСТА МНОГО СОЖРЕТ
"""
res = 0
for i in range(1, len(text)-2):
if text[i] == "в" or text[i] == "В": # Нам подходят оба регистра
if text[i+1] == "ы":
if (text[i-1] == ' ' or text[i-1] == ',' or text[i-1] == '.') and ((text[i+2] == "…") or (text[i+2] == ' ') or (text[i+2] == '.') or (text[i+2] == ',') or (text[i+2] == '?') or (text[i+2] == '!') or (text[i+2] == ':')):
continue #скипаем, потому что отдельные слова нам не подходят
else:
res += 1
print(text[i - 1] + text[i] + text[i + 1] + text[i + 2])
print(res) # выведет 48
