问题描述:有一些句子和一些关键词,现在想找出包含至少一个关键词的那些句子(文本嗅探),可以参考print('='*30)之前的代码。如果想进一步计算每个句子中的关键词占比(句子中所有关键词长度之和/句子长度),可以参考后面的代码。关键词占比是比较常用的一个文本分类标准,如果想根据关键词占比对句子进行分类的话,可以自行补充代码。
本文主要演示列表推导式、字符串对象用法以及生成器表达式和内置函数的用法。
from random importchoice
from string import ascii_letters
def check(sentences, words):
'''返回包含至少一个关键词的句子列表'''
return [sentence \
for sentence in sentences\
if sum(sentence.count(word)\
for word in words)>0]
sentences = ['This is a test.',
'Beautiful is better than ugly.',
'Explicit is better than implicit.',
'Simple is better than complex.',
'Sparse is better than dense.',
'Readability counts.',
'Now is better than never.']
words = ['test', 'count', 'dense', 'is', 'simple']
result = check(sentences, words)
for item in result:
print(item)
print('='*30)
# 计算每个句子中所有关键字总长度的占比
d = {sentence:round(sum(sentence.count(word)*len(word)\
for word in words)/len(sentence),3)\
for sentence in result}
for item in d.items():
print(item)
运行结果:
This is a test.Beautiful is better than ugly.Explicit is better than implicit.Simple is better than complex.Sparse is better than dense.Readability counts.Now is better than never.==============================('This is a test.', 0.533)('Beautiful is better than ugly.', 0.067)('Explicit is better than implicit.', 0.061)('Simple is better than complex.', 0.067)('Sparse is better than dense.', 0.25)('Readability counts.', 0.263)('Now is better than never.', 0.08)