У меня есть столбец в кадре данных панд, где каждая ячейка содержит довольно длинную строку слов.Эти строки взяты из базы данных SQL и содержат сочетание слов и буквенно-цифровых идентификационных фраз, которые не являются английскими и разделены пробелами.Эти строки могут быть максимумом символа SQL.Это тоже не маленький фрейм данных, у меня несколько миллионов строк.
Вопрос в том, что является самым быстрым способом сохранить только правильные английские слова для каждой ячейки?
Ниже приведен мой первоначальный метод, который, по-видимому, занял бы несколько дней, исходя из скорости, предложенной из tqdm.(следовательно, progress_apply).
import pandas as pd
from nltk.corpus import words
from tqdm import tqdm
def check_for_word(sentence):
s = sentence.split(' ')
for word in s:
if word not in words.words():
s.remove(word)
return ' '.join(s)
tqdm.pandas(desc="Checking for Words in keywords")
df['keywords'] = df['keywords'].progress_apply(check_for_word)
Есть ли способ, который был бы значительно быстрее?
Спасибо за вашу помощь!
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Ответ ниже был очень полезным и занял меньше секунды (БОЛЬШОЕ УЛУЧШЕНИЕ!).В конце концов, мне пришлось изменить слова nltk.corpus на wordl nltk.corpus, поскольку слова не были исчерпывающим списком для моих целей.Окончательный результат был:
from nltk.corpus import wordnet
from tqdm import tqdm
def check_for_word(s):
return ' '.join(w for w in str(s).split(' ') if len(wordnet.synsets(w)) > 0)
tqdm.pandas(desc="Checking for Words in Keywords")
df['keywords'] = df['keywords'].progress_apply(check_for_word)
, что заняло 43 секунды для запуска.