我正在使用NLTK,我想找到所有包含给定关键字集的句子。例如,当前为[x for x in tokenized_sent if 'key_word1' and 'key_word2' and 'key_word3' in x]
。我想设置它,以便用户可以输入任意数量的单词,然后可以将这些单词设置为等于这些由and
分隔的关键字。
我尝试过通过编写[x for x in tokenized_sent if user_input_list[0] and user_input_list[1] in x]
来插入user_input_list = ['key_word1','key_word2']
,这很有效,但必须有更好的方法,尤其是处理任何给定数量的单词的方法。谢谢
您可以使用集合子集。将用户输入列表设置为一组,看看它是否是关键字的子集。
[x for x in tokenized_sent if set(user_input_list).issubset(x)]
我认为您可以使用all-关键字:
[words for words in tokenized_sent if all([keyword in words for keyword in keywords])]
注意:结果中的第一个-语句是布尔值,而第二个用于从列表中获取元素。
使用filter
和all
方法:
list(filter(lambda x: all(key in x for key in user_input_list), tokenized_sent))