Исправление орфографии с помощью TextBlob, автокоррекция

Я пытался реализовать функцию, которая исправляла бы орфографию в нескольких документах. Я попробовал два метода, а именно TextBlob и autocorrect.

Использование TextBlob

def spell_correct(word_list):
    try:
        corrected = []
        for word in word_list:
            w = Word(word)
            corrected.append(w.correct())
        return corrected
    except UnicodeDecodeError:
        return None

Использование автозамены

def spell_correct(word_list):
     try:
         corrected = []
         for word in word_list:
             corrected.append(spell(word))
         return corrected
     except UnicodeDecodeError:
         return None

Оба они хорошо работают с одним списком слов, предоставленным в качестве входных данных. Однако, когда я работаю с несколькими документами в пандах DataFrame из 13 тыс. строк, это занимает так много времени, что я обычно KeyboardInterrupt. Я нетерпелив или есть более быстрый способ правильно писать?

Обновление Вот как я применяю эти функции к нескольким документам в pandas DataFrame,

df['corrected_words'] = df.words.apply(lambda x: spell_correct(x))

person labeebee    schedule 20.03.2018    source источник
comment
Как вы вызываете эти функции?   -  person ndmeiri    schedule 20.03.2018
comment
Я применяю это к каждой записи таким образом, df['corrected_words'] = df.words.apply(lambda x: spell_correct(x))   -  person labeebee    schedule 20.03.2018
comment
Обычно предпочтительнее, если вы отредактируете свой ответ, чтобы ответить на уточняющие вопросы, требующие кода. Не могли бы вы сделать это?   -  person ndmeiri    schedule 20.03.2018
comment
@ndmeiri Я не понял. Что именно я должен делать?   -  person labeebee    schedule 20.03.2018
comment
Простая оптимизация, которую вы можете применить здесь, — преобразовать список слов из вашего документа, чтобы установить и исправить слова, и применить то же самое ко всему списку слов.   -  person Poorna Prudhvi    schedule 20.03.2018
comment
@LaBee Я просто надеялся, что вы сможете отредактировать свой вопрос, чтобы включить свой ответ на мой комментарий. Спасибо!   -  person ndmeiri    schedule 20.03.2018
comment
Это нормально. На него. @ndmeiri   -  person labeebee    schedule 21.03.2018


Ответы (1)


Этот пост довольно старый, но я столкнулся с похожей проблемой. Вы проверили SymSpell от Wolf Garbe, это быстрое исправление орфографии, способное передать 5000 слов за 1 секунду (на Mac Book Pro). Я думаю, это может помочь в аналогичной проблеме, которую вы написали здесь. Он опубликовал всю документацию и т. д. на https://github.com/wolfgarbe/SymSpell.

Убедитесь, что pip установил его первым

python -m pip install -U symspellpy

запустите его с помощью:

from symspellpy.symspellpy import SymSpell 

def main():
    # maximum edit distance per dictionary precalculation
    max_edit_distance_dictionary = 2
    prefix_length = 7
    # create object
    sym_spell = SymSpell(max_edit_distance_dictionary, prefix_length)

    # create dictionary using corpus.txt
    if not sym_spell.create_dictionary(<path/to/corpus.txt>):
        print("Corpus file not found")
        return

    for key, count in sym_spell.words.items():
        print("{} {}".format(key, count))

if __name__ == "__main__":
    main()
person hux0    schedule 17.04.2020