Как я могу сократить время для фильтрации моего набора данных статьи? - PullRequest
1 голос
/ 22 июня 2019

Я пытаюсь отфильтровать свой набор данных, содержащий почти 50 тыс. Статей. Из каждой статьи я хочу отфильтровать стоп-слова и знаки препинания. Но этот процесс занимает много времени. Я уже отфильтровал набор данных, и это заняло 6 часов. Теперь у меня есть еще один набор данных для фильтрации, содержащий 300 тыс. Статей.

Я использую python в среде анаконды. Конфигурация ПК: Core i5 7-го поколения, 8 ГБ оперативной памяти и графический процессор NVIDIA 940MX. Чтобы отфильтровать мой набор данных, я написал код, который берет каждую статью в наборе данных, маркирует слова, а затем удаляет стоп-слова, знаки препинания и цифры.

def sentence_to_wordlist(sentence, filters="!\"#$%&()*+,-./:;<=>?@[\\]^_`{|}~\t\n?,।!‍.'0123456789০১২৩৪৫৬৭৮৯‘\u200c–“”…‘"):
    translate_dict = dict((c, ' ') for c in filters)
    translate_map = str.maketrans(translate_dict)
    wordlist = sentence.translate(translate_map).split()
    global c,x;
    return list(filter(lambda x: x not in stops, wordlist))

Теперь я хочу сократить время для этого процесса. Есть ли способ оптимизировать это?

1 Ответ

0 голосов
/ 22 июня 2019

Я не уверен, сможете ли вы действительно значительно ускорить ваш код. str.translate() уже довольно быстро! Это может не сильно измениться, но, возможно, вы можете начать с перемещения первых двух строк в теле вашей функции выше, чтобы вы не создавали translate_map каждый раз, когда вызываете функцию.

Вы можете также рассмотреть возможность использования пакета multiprocessing python для запуска вашего скрипта на нескольких ядрах.

...