Распараллелить функцию на фрейме данных панд - PullRequest
0 голосов
/ 17 января 2019

Я пытаюсь сравнить список «документов», чтобы увидеть, насколько они связаны с определенным словом, например, списком твитов, по сравнению со словом в списке слов, например, «политика».... и т. д. Я создал удовлетворительное решение с помощью векторной функции Spacy similarity и панд, но, не зная ни одной библиотеки, думаю, мое решение можно было бы сделать значительно быстрее.Мне нужно сделать это на потенциально миллионах строк, так что любое повышение производительности приветствуется, но я думаю, что это может быть значительно быстрее, если я распараллелю это действие, действующее на фрейме данных Pandas.К сожалению, у меня мало опыта распараллеливания, любая помощь будет признательна.Выходными данными должен быть список текста, за которым следует столбец для оценки каждого слова.Например:

text               | 'politics' | 'banana' 
"hello america..." |    0.4     |    0.2
"apple on a tree.."|    0.1     |    0.7
...

Минимальный пример существует ниже

import pandas as pd
import spacy

# from: https://www.kaggle.com/kingburrito666/better-donald-trump-tweets
myfile = "//Downloads//better-donald-trump-tweets//Donald-Tweets!.csv"

df = pd.read_csv(myfile)

nlp = spacy.load('en_core_web_lg')

# words to iterate over
word_list = ['america', 'USA', 'great', 'banana']

# take a sample for demo of the text field
df_trump = df.head(50)[['Tweet_Text']]

# iterate through the words
for word in word_list:
    # turn the word into a vocabulary object to compare against
    comparitor = nlp.vocab[word]
    df_trump[word] = df_trump['Tweet_Text'].apply(
        lambda doc: comparitor.similarity(nlp(str(doc))))

print(df_trump.head())
...