对于单词分类,我定义了正面和负面的词汇,并且 我想识别中性词(中性词有无穷大)
所以我这样做了:
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]
答案 0 :(得分:1)
从@blue_note的答案继续:
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)
for
与in
一起使用。 not in
不是{1}和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
中都没有?