52. Повторяющиеся слова.

(открыть в новой вкладке)

Условие:

Проверка орфографии – лишь составная часть расширенного текстового анализа на предмет наличия ошибок. Одной из самых распространенных ошибок в текстах является повторение слов. Например, автор может по ошибке дважды подряд написать одно слово, как в следующем примере:
>>> At least one value must be entered
>>> entered in order to compute the average.
Некоторые текстовые процессоры умеют распознавать такой вид ошибок при выполнении текстового анализа.
В данном упражнении вам предстоит написать программу для определения наличия дублей слов в тексте. При нахождении повтора на экран должен выводиться номер строки. Удостоверьтесь, что программа корректно обрабатывает случаи, когда повторяющиеся слова находятся на разных строках, как в предыдущем примере.
Предлагаю воспользоваться готовым файлом с ошибками, который называется pushkin_mistakes.txt (это Сказка о мертвой царевне и о семи богатырях): ⇒ А.С. Пушкин

Код:

buff = open("./pushkin_mistakes.txt")

text_before = []                                                                                    # будем сюда сохранять предыдущую строку
count = 0                                                                                           # счётчик строк
mistake = []                                                                                        # в этот список будем кидать номера строк с ошибками
while True:
    count += 1
    text = buff.readline()
    if text == "":                                                                                  # условие отмены цикла
        break
    text = text.lower()
    text_mod = ""                                                                                   # создаём новую строку с нуля
    for i in text:
        if ("а" <= i <= "я") or (i == " ") or (i == "-"):
            text_mod += i
    text = text_mod.split(" ")                                                                      # разобьём новую строку на список из слов
    text = [i for i in text if (i != "")]                                                           # уберём лишнее из списка
    if len(text_before) > 0 and len(text) > 0:                                                      # ищем ошибки-повторы в разных строках
        if text[0] == text_before[-1]:
            mistake.append(count)        
    temp = ""                                                                                       # ищем ошибки-повторы в одной строке
    for i in text:
        if i == temp:
            mistake.append(count)
        temp = i
    print(count, text)                                                                              # напечатаем строки-списки и их номера, для проверки
    text_before = text                                                                              # присвоем новое значение для предыдущей строки

print()
print("Ошибки в след. строках (если номера повторяются значит несколько ошибок):", mistake)
print()