#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
orNumba
, который может скомпилировать некоторый код на C / C . Numba против Cython: Как выбрать . ИЛИ, может быть, он мог бы работать быстрее, используяthreading
илиmultiprocessing
.5. смотрите pandarallel для запуска кода во многих потоках.