Lemmatisieren Sie eine ganze Spalte mit der Lambda-Funktion

Sep 09 2020

Ich habe diesen Code auf einen Satz getestet und möchte ihn konvertieren, damit ich eine ganze Spalte lemmatisieren kann, in der jede Zeile aus Wörtern ohne Interpunktion besteht, wie: deportivas calcetin hombres deportivas shoes

    import wordnet, nltk
nltk.download('wordnet')
from nltk.stem import WordNetLemmatizer
from nltk.corpus import wordnet
import pandas as pd

df = pd.read_excel(r'C:\Test2\test.xlsx')
# Init the Wordnet Lemmatizer
lemmatizer = WordNetLemmatizer()
sentence = 'FINAL_KEYWORDS'
def get_wordnet_pos(word):
    """Map POS tag to first character lemmatize() accepts"""
    tag = nltk.pos_tag([word])[0][1][0].upper()
    tag_dict = {"J": wordnet.ADJ,
                "N": wordnet.NOUN,
                "V": wordnet.VERB,
                "R": wordnet.ADV}

    return tag_dict.get(tag, wordnet.NOUN)



#Lemmatize a Sentence with the appropriate POS tag
sentence = "The striped bats are hanging on their feet for best"
print([lemmatizer.lemmatize(w, get_wordnet_pos(w)) for w in nltk.word_tokenize(sentence)])

Angenommen, der Spaltenname lautet df ['Schlüsselwörter']. Können Sie mir helfen, eine Lambda-Funktion zu verwenden, um die gesamte Spalte so zu lemmatisieren, wie ich den obigen Satz lemmatisiere?

Vielen Dank im Voraus

Antworten

AvivYaniv Sep 09 2020 at 16:41

Bitte schön:

  1. Verwenden Sie applydiese Option , um auf die Sätze der Spalte anzuwenden
  2. Verwenden Sie einen Lambda-Ausdruck, der eine sentenceEingabe erhält und die von Ihnen geschriebene Funktion anwendet, ähnlich wie Sie sie in der print-Anweisung verwendet haben

Als lemmatisierte Schlüsselwörter:

# Lemmatize a Sentence with the appropriate POS tag
df['keywords'] =  df['keywords'].apply(lambda sentence: [lemmatizer.lemmatize(w, get_wordnet_pos(w)) for w in nltk.word_tokenize(sentence)])

Als lemmatisierter Satz ( joinStichwörter mit ''):

# Lemmatize a Sentence with the appropriate POS tag
df['keywords'] =  df['keywords'].apply(lambda sentence: ' '.join([lemmatizer.lemmatize(w, get_wordnet_pos(w)) for w in nltk.word_tokenize(sentence)]))