Как извлечь антонимы из фрейма данных и поместить его в другой, используя python wordnet - PullRequest
0 голосов
/ 01 марта 2019

Я пытаюсь получить набор синонимов и антонимов для каждого столбца в моем фрейме данных, я смог получить синонимы, но антоним, я не смог, это моя попытка, спасибо

import pandas  as pd
import nltk.corpus
from nltk.corpus import stopwords, wordnet
from nltk.tokenize import word_tokenize
from nltk.stem import PorterStemmer, WordNetLemmatizer

df = pd.read_csv('healthtapQAs++.csv')
df['unpunctuated'] = df['question'].str.replace(r'[^\w\s]+', '')
df['tokenized'] = df['unpunctuated'].apply(word_tokenize) 
stop = stopwords.words('english')
df['stopped']= df['tokenized'].apply(lambda x: [item for item in x if item 
not in stop])
df['syno'] = df['stopped'].apply(lambda x: [wordnet.synsets(y) for y in x])
df['synonyms_question'] = df['syno'].apply( lambda x:[(y[0].lemmas() 
[0].name()) if len(y) >0 else "" for y in x])
anto = df['syno']
for j in anto.lemmas():
     if j.antonyms():
         df['antonyms'] = j.antonyms[0]().name()
#df['antoyms_question'] = df['syno'].apply( lambda x:[(for j in 
y[0].lemmas() if if j.antonyms()) if len(y) >0 else "" for y in x])

и это ошибка, которую я получаю, я новичок, когда дело доходит до кодирования ... спасибо.

    return object.__getattribute__(self, name)

     AttributeError: 'Series' object has no attribute 'lemmas'

1 Ответ

0 голосов
/ 01 марта 2019

Итак, я решил это, добавив эту функцию, которую я нашел в сети, а затем используя ее на моем фрейме данных

def get_antonyms(input_lemma):
antonyms = []
for syn in wordnet.synsets(input_lemma):
    for lemma in syn.lemmas():
        if lemma.antonyms():
            antonyms.append(lemma.antonyms()[0].name())
return antonyms

, после чего я использую ее следующим образом

df['antonyms_question'] = df['stopped'].apply(lambda x: [get_antonyms(y) for y in x])
...