Как я могу написать для утверждения таким образом: я не в х - PullRequest
0 голосов
/ 23 апреля 2019

для классификации слов, я определил положительные и отрицательные словари, и я хочу идентифицировать нейтральные слова (существует бесконечность нейтральных слов)

так я и сделал:

def word_feats(word): 
return {word: True}   
voc_pos = [ 'beauty', 'good', 'happy']    
voc_neg = [ 'bad', 'sick','lazy']    
voc = voc_pos + voc_neg    
pos_feats = [(word_feats(pos), 'pos') for pos in voc_pos]     
neg_feats = [(word_feats(neg), 'neg')for neg in voc_neg]    
neu_feats = [(word_feats(neu), 'neu')for neu not in voc]

ошибка:

"invalid syntax" for neu_feats = [(word_feats(neu), 'neu')for neu not in voc]

Ответы [ 4 ]

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

Продолжение ответа @ blue_note:

Использование zip_longest():

def word_feats(word):
        return {word: True}

voc_pos = [ 'beauty', 'good', 'happy']
voc_neg = [ 'bad', 'sick','lazy']
voc = voc_pos + voc_neg

mylist = ['book']

pos_feats = [(word_feats(pos), 'pos') for pos in voc_pos]
neu_feats = [(word_feats(neu), 'neu') for neu in mylist if neu not in voc]
neg_feats = [(word_feats(neg), 'neg') for neg in voc_neg]

print([*zip_longest(pos_feats, neu_feats, neg_feats)])

ВЫХОД :

[(({'beauty': True}, 'pos'), ({'book': True}, 'neu'), ({'bad': True}, 'neg')), (({'good': True}, 'pos'), None, ({'sick': True}, 'neg')), (({'happy': True}, 'pos'), None, ({'lazy': True}, 'neg'))]
1 голос
/ 23 апреля 2019

Этот код недействителен:

for neu not in voc:

Причина в том, что список, который мог бы создать, бесконечен! Как говорит blue_note, вы можете проверить два списка друг против друга. Вы также можете сделать это с коллекциями вместо списков:

for neu in all_words - set(voc_pos) - set(voc_neg):

Где all_words - это другая коллекция, которую вы сделали

0 голосов
/ 23 апреля 2019

Вы не можете перебирать все, что не входит в список, потому что это будет бесконечный (и неопределенный) набор.

Если вы определите свой домен, например, все целые числа от 1 до 10, вы можете перебиратьДля элементов, которых нет в списке, вот так:

domain = [1,2,3,4,5,6,7,8,9,10]
lst = [1,2,3]
# what you want:
neu = [(word_feats(neu), 'neu')for neu in (set(domain)-set(lst))]

Тем не менее, я думаю, что вам нужно решать это по-другому.Поскольку вряд ли у вас будет список всех существующих слов для создания этого списка, и с таким списком будет трудно работать, возможно, будет проще проверить, является ли слово нейтральным, проверив, нет ли его в * 1006.* ни в neg_feats?

0 голосов
/ 23 апреля 2019

for работает с in.not in не является соединением not и in.Это отдельный оператор.

Итак, используйте понимание списка

[(word_feats(neu), 'neu') for neu in mylist if neu not in voc]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...