Как я могу применить функцию проверки орфографии к большому набору данных?

#python #dataframe #spell-checking #enchant

#python #dataframe #проверка орфографии #зачаровывать

Вопрос:

У меня есть функция проверки орфографии (исправление орфографии Питера Новига), которая работает с небольшими фреймами данных, но для фреймов данных с 5000 словами требуется много времени для запуска, и я останавливаю программу. У кого-нибудь есть решение?

 #correct spelling
import enchant
from spellchecker import SpellChecker
spell = SpellChecker()
def spell_correct(text):
        try:
            output = ""
            splited_words = text.split()
            d = enchant.Dict("en_US")
            for i in splited_words:
                if d.check(i):
                    output = output   i   " "
                else:
                    output = output   spell.correction(i)   " "
        except Exception as e:
            print(e)
        return output
    
df["Text"] = df["Text"].apply(spell_correct)
df

  

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

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

2. также я думаю, что время выполнения занимает много времени, в больших данных это обычная ситуация

3. Итак, позвольте программе работать? @NurbekBoymurodov

4. сначала вы могли бы создать d = enchant.Dict("en_US") только одноразовую внешнюю функцию spell_correct() . Это должно работать немного быстрее. Второе: вы могли бы сохранить output в виде списка элементов и присоединить его к строке только один раз — в конце. Это также может работать немного быстрее. Но если она все еще слишком медленная, вам, возможно, придется переписать ее на другом языке (C / C / Go / Rust / Julia) или попытаться использовать Cython or Numba , который может скомпилировать некоторый код на C / C . Numba против Cython: Как выбрать . ИЛИ, может быть, он мог бы работать быстрее, используя threading или multiprocessing .

5. смотрите pandarallel для запуска кода во многих потоках.