Как подсчитать ошибки в словах с помощью Python?

#python #parsing #translation

#python #синтаксический анализ #перевод

Вопрос:

Я создаю программу, которая должна переводить месяцы года с французского на английский. Я начал с этого кода:

 import sys

months_list_fr = ['janvier', 'février', 'mars', 'avril', 'mai', 'juin', 'juillet', 'août', 'septembre', 'octobre',
                  'novembre', 'décembre']

months_list_en = ['january', 'February', 'march', 'april', 'may', 'june', 'july', 'august', 'september', 'october',
                  'november', 'december']

months_dict = {
    'janvier': 'January',
    'février': 'February',
    'mars': 'March',
    'avril': 'April',
    'mai': 'May',
    'juin': 'June',
    'juillet': 'July',
    'août': 'August',
    'septembre': 'September',
    'octobre': 'October',
    'novembre': 'November',
    'décembre': 'December'
}


def translate_month(month: str):
    month = month.lower()
    
    # Changes value for the month in english in dict
    if month in months_list_fr:
        month = months_dict[month]
    
    # Simply returns the original english month
    elif month in months_list_en:
        return month
    
    # There must be a mistake
    else:
        print_err_n_exit()
    return month


def print_err_n_exit():
    print(f"There may be a typo in the month or maybe the month is in another language. See module translate.")
    sys.exit()
 

Вот пример использования:

 print(translate_month('janvIer'))
 

Вывод:

 January

Process finished with exit code 0
 

В настоящее время программа будет переводить код только в определенном случае: когда слово появляется точно так же в одном из двух списков (без учета регистра).

Теперь, как насчет случая, когда я делаю ошибку в слове:

 print(translate_month('janvUer'))
 

Или случай, когда я забываю букву:

 print(translate_month('janvIe'))
 

Или снова, если я добавлю букву:

 print(translate_month('janvIerz'))
 

Во всех этих случаях мой код не распознал бы слова и выдал бы сообщение об ошибке. Я думаю, у всех этих случаев есть общая точка зрения: я допустил только одну ошибку в word.

Каким был бы алгоритм, который мог бы подсчитывать ошибки в словах? Если это так, каждая из этих ошибок будет считаться одной ошибкой. Имея возможность их подсчитать, было бы легко перевести слово и исправить ошибку (когда mistakes_count <= 1 ) или вывести сообщение об ошибке, когда слово слишком отличается от слов, которые я ищу (когда mistakes_count > 1 ).

Комментарии:

1. Возможно, вы захотите прочитать о расстоянии Левенштейна .

2. внимание, никогда не просите «лучшее», основанное на мнении, а затем одну из причин закрыть ваш вопрос

3. Спасибо за вашу помощь, алгоритм очень полезен, и спасибо за советы по изданию.

Ответ №1:

вы можете использовать pyspellchecker, это библиотека, созданная для базовой проверки орфографии. Он также поддерживает несколько языков.

pyspellchecker поддерживает несколько языков, включая английский, испанский, немецкий, французский и португальский.

Вы также можете настроить библиотеку с учетом регистра или без него, добавив ее в качестве параметра в функцию проверки орфографии SpellChecker(case_sensitive=True)

Чтобы узнать больше: https://pyspellchecker.readthedocs.io/en/latest/, https://readthedocs.org/projects/pyspellchecker/downloads/pdf/latest/

Комментарии:

1. Извините, я больше интересовался логикой этого процесса. Я хотел решить проблему без слишком большого количества пакетов или библиотек.

Ответ №2:

Глядя на вашу цель удаления ошибок, я предлагаю следующее.

Чтобы расширить область ввода, мы используем вещи, называемые регулярными выражениями или регулярными выражениями. Используя их, вы можете сказать, например,

Если ввод пользователя начинается с «j» и заканчивается на «r», они означают «janvier».

Обработайте остальную часть программы соответствующим образом.

Узнайте больше здесь и найдите официальную документацию здесь .

Комментарии:

1. Я думал об использовании регулярных выражений, но, тем не менее, разве это не делает проблему еще больше, поскольку мне пришлось бы указывать все возможные ошибки в каждом отдельном слове? Какие условия проверки вы бы использовали? Вы можете объяснить их на английском языке.