lematize uma coluna inteira usando a função lambda

Sep 09 2020

Tenho esse código testado para uma frase e quero convertê-lo para que possa lematizar uma coluna inteira onde cada linha consiste em palavras sem pontuação como: 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)])

Vamos supor que o nome da coluna seja df ['palavras-chave'], você pode me ajudar a usar uma função lambda para lematizar a coluna inteira como eu lematizo a frase acima?

Muito obrigado antecipadamente

Respostas

AvivYaniv Sep 09 2020 at 16:41

Aqui está:

  1. Use applypara aplicar nas frases da coluna
  2. Use a expressão lambda que obtém um sentencecomo entrada e aplica a função que você escreveu, de forma semelhante a como você usou na instrução de impressão

Como palavras-chave lematizadas:

# 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)])

Como uma frase lematizada ( joinpalavras-chave usando ''):

# 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)]))