我如何以这种方式写声明:因为我不在x

时间:2019-04-23 08:39:07

标签: python nltk

对于单词分类,我定义了正面和负面的词汇,并且 我想识别中性词(中性词有无穷大)

所以我这样做了:

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 个答案:

答案 0 :(得分:1)

从@blue_note的答案继续:

使用zip_longest()

public class User
{
    public int ID { get; set; }
    public string Username { get; set; }
    public string Email { get; set; }
    public string Password { get; set; }
    public string UserImage { get; set; }
    public Role Role { get; set; }
    public virtual ICollection<Signature> Signatures { get; set; }
}

输出

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

答案 1 :(得分:1)

此代码无效:

for neu not in voc:

原因是可以产生的列表是无限的! 正如blue_note所说,您可以相互检查两个列表。您也可以使用集合而不是列表来做到这一点:

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

其中all_words是您收集的其他集合

答案 2 :(得分:0)

forin一起使用。 not in 不是not的结合。它是一个单独的运算符。

因此,请使用列表理解

in

答案 3 :(得分:0)

您不能遍历列表中没有的任何内容,因为那将是一个无限(且未定义)的集合。

如果您定义域,例如从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))]

但是,我认为您需要以不同的方式解决这个问题。由于您不太可能拥有所有单词的列表来实例化此列表,并且这样的列表将很难使用,因此可能更容易通过检查{{ 1}}还是pos_feats中都没有?