Wie man pos_tag_sents () effizient auf Pandas Dataframe anwendet

8

In Situationen, in denen Sie eine in einem Pandas-Datenrahmen gespeicherte Spalte mit 1 Satz pro Zeile markieren möchten, verwenden die meisten Implementierungen auf SO die Methode apply

%Vor%

Die NLTK-Dokumentation empfiehlt die Verwendung von pos_tag_sents () zur effizienten Kennzeichnung von mehr als ein Satz.

Gilt das für dieses Beispiel und wenn ja, wäre der Code so einfach wie das Ändern von pso_tag in pos_tag_sents oder bedeutet NLTK Textquellen von Absätzen

Wie in den Kommentaren erwähnt, versucht pos_tag_sents() das Laden des Präzeptors jedes Mal zu reduzieren aber das Problem ist, wie man das macht und trotzdem eine Spalte in einem Pandas-Dataframe erzeugt?

Link zu Beispiel-Dataset 20kRows

    
mobcdi 16.01.2017, 10:46
quelle

3 Antworten

5

Eingabe

%Vor%

TL; DR

%Vor%

In Lang:

Zuerst können Sie die Spalte Text in eine Liste von Zeichenfolgen extrahieren:

%Vor%

Dann können Sie die Funktion word_tokenize anwenden:

%Vor%

Beachten Sie, dass @ Bouds Vorschlag mit df.apply fast identisch ist:

%Vor%

Dann legen Sie den in Token geschriebenen Text in eine Liste der String-Liste:

%Vor%

Dann können Sie pos_tag_sents :

verwenden %Vor%

Dann fügen Sie die Spalte zurück zum DataFrame:

%Vor%     
alvas 07.02.2017, 04:29
quelle
2

Durch Anwenden von pos_tag auf jede Zeile wird das Perceptron-Modell jedes Mal geladen (kostspieliger Vorgang, da es eine Beize von der Platte liest).

Wenn Sie stattdessen alle Zeilen erhalten und sie an pos_tag_sents senden (was list(list(str)) benötigt), wird das Modell einmal geladen und für alle verwendet.

Siehe die Quelle .

    
Iulius Curt 16.01.2017 10:57
quelle
2

Weisen Sie dies stattdessen Ihrer neuen Spalte zu:

%Vor%     
Boud 03.02.2017 21:56
quelle