wie zu parallelisieren viele (fuzzy -) string-Vergleiche, die mit gelten Pandas?

Ich habe Folgendes problem

Ich habe einen dataframe master enthält Sätze wie

master
Out[8]: 
                  original
0  this is a nice sentence
1      this is another one
2    stackoverflow is nice

Für jede Zeile in Master -, I-lookup in eine andere Dataframe slave für die beste übereinstimmung mit fuzzywuzzy. Ich benutze fuzzywuzzy, weil die übereinstimmenden Sätze zwischen den beiden dataframes ein bisschen unterscheiden (Sonderzeichen, etc).

Beispielsweise slave könnte

slave
Out[10]: 
   my_value                      name
0         2               hello world
1         1           congratulations
2         2  this is a nice sentence 
3         3       this is another one
4         1     stackoverflow is nice

Hier eine voll funktionsfähige, wunderschöne, kompakte Beispiel arbeiten 🙂

from fuzzywuzzy import fuzz
import pandas as pd
import numpy as np
import difflib


master= pd.DataFrame({'original':['this is a nice sentence',
'this is another one',
'stackoverflow is nice']})


slave= pd.DataFrame({'name':['hello world',
'congratulations',
'this is a nice sentence ',
'this is another one',
'stackoverflow is nice'],'my_value': [2,1,2,3,1]})

def fuzzy_score(str1, str2):
    return fuzz.token_set_ratio(str1, str2)

def helper(orig_string, slave_df):
    #use fuzzywuzzy to see how close original and name are
    slave_df['score'] = slave_df.name.apply(lambda x: fuzzy_score(x,orig_string))
    #return my_value corresponding to the highest score
    return slave_df.ix[slave_df.score.idxmax(),'my_value']

master['my_value'] = master.original.apply(lambda x: helper(x,slave))

Die 1-Millionen-Dollar-Frage ist: kann ich parallelisieren gelten meine obigen code?

Nachdem alle, jede Zeile in master ist im Vergleich zu all den Zeilen in slave (slave ist ein kleiner Datensatz, und ich kann viele Kopien der Daten in den Arbeitsspeicher (RAM).

Ich sehe nicht ein, warum ich nicht ausführen konnte mehrere Vergleiche (D. H. die Verarbeitung mehrerer Zeilen gleichzeitig).

Problem: ich weiß nicht, wie das geht oder ob das überhaupt möglich ist.

Jede Hilfe sehr dankbar!

  • Ich bemerken Sie das dask tag hier. Haben Sie versucht, mit dask schon und laufen in ein Problem?
  • vielen Dank für Ihre Hilfe! es scheint dask akzeptiert nur regulären Funktionen
  • auch, ich habe nur einen computer, so dass keine verteilte Aufträge über Maschinen
  • Dask verwendet cloudpickle zu serialisieren Funktionen und so kann problemlos mit lambdas und closures gegenüber anderen datasets.
  • dann wären Sie in der Lage zu schreiben, die einfach obigen code in dask, wie Sie Sie vorschlagen?
  • Etwa die gleiche, aber ich würde assign statt Spalte Zuordnung, und ich würde die Metadaten zu apply über die Spalte, die Sie erwarten. Wenn Sie erstellen eine minimale reproduzierbare Beispiel, dann ist es leichter, eine explizite Lösung. Zum Beispiel, etwas, das kann ich copy-und-paste zu arbeiten, nur auf meinem lokalen Rechner.
  • das hört sich gut an. ich glaube, der code oben ist voll funktionsfähig
  • Lassen Sie uns weiter, diese Diskussion im chat.
  • verwenden können den chat jetzt leider. bitte sagen Sie mir, was Sie brauchen und ich werde mein bestes tun! vielen Dank für Eure Hilfe
  • ok habe es lassen Sie mich das erstellen einer paste und go-code für Sie
  • Hallo @MRocklin, bitte siehe meine aktualisierte Antwort. Danke!!

InformationsquelleAutor | 2016-06-22
Schreibe einen Kommentar