Извлечь слово с NN-тегом из кортежа в списке - PullRequest
0 голосов
/ 18 апреля 2019

Я пытаюсь извлечь 0-й элемент в каждом кортеже, который имеет тег 'NN'.Просто хочу извлечь слова против тегов.Например.каждой строки:

train['Tag'] = [('unclear', 'JJ'), ('incomplete', 'JJ'), ('instruction', 'NN'), ('given', 'VBN')]

Я пытался извлечь 1-й элемент в каждом кортеже, используя предложение where

train['Tagged2']= [x[0] for x in train['Tag'] if x[1] in ("NN")]

Ожидаемые результаты, новый столбец содержит каждую строку со словами с тегами NN,здесь в примере это будет слово 'instruction'

Ответы [ 3 ]

1 голос
/ 18 апреля 2019

Поскольку вам нужно создать новый столбец pandas на основе условия, вы можете использовать приведенный ниже код для фильтрации слов с тегом NN

df = pd.DataFrame()
df['Tag'] = [('unclear', 'JJ'), ('incomplete', 'JJ'), ('instruction', 'NN'), ('given', 'VBN')]

# create 2 separate columns with tags and words
df['words'] = [i[0] for i in df['Tag']]
df['tags'] = [i[1] for i in df['Tag']]

# use np.where to find tags with `NN`
df['Tagged2'] = np.where(df['tags']=='NN', df['words'], np.nan)

df.drop(['words','tags'],1,inplace=True)
print(df)

Вывод:

                Tag      Tagged2                                                                                                     
0      (unclear, JJ)          NaN                                                                                                     
1   (incomplete, JJ)          NaN                                                                                                     
2  (instruction, NN)  instruction                                                                                                     
3       (given, VBN)          NaN 
1 голос
/ 18 апреля 2019

==:

Если значения двух операндов равны, то условие становится правда.

in

Оценивает true, если находит переменную в указанной последовательности и иначе false.

Следовательно

Используйте оператор сравнения == вместо in:

tt = [('unclear', 'JJ'), ('incomplete', 'JJ'), ('instruction', 'NN'), ('given', 'VBN')]

print([t[0] for t in tt if t[1] == 'NN'])

ВЫВОД

['instruction']

EDIT :

Поскольку вы обновили свой вопрос:

train = {}    # Assuming that you're working with associative arrays i.e. dict in Py

train['Tag'] = [('unclear', 'JJ'), ('incomplete', 'JJ'), ('instruction', 'NN'), ('given', 'VBN')]

print([t[0] for t in train['Tag'] if t[1] == 'NN'])

OUTPUT

['instruction']

pyFiddle

0 голосов
/ 18 апреля 2019
train['Tagged3']= train['subclause'].apply(lambda x:' '.join([word for (word, pos) in nltk.pos_tag(nltk.word_tokenize(x)) if pos[0] == 'N']))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...