基于Python的短语出现次数排序算法程序
假设我们有两个列表:包含几个选定短语的’phrases’和包含可能包含另一列表中短语的多个句子的’sentences’。我们需要找出第一个列表中各个短语是否出现在第二个列表中,并根据它们在第二个列表中出现的次数对第一个列表进行排序。我们将排序后的列表’phrases’作为输出结果返回。
因此,如果输入是phrases = [‘strong’,’durable’,’efficient’],sentences = [‘the product is durable and efficient’,’strong and durable’,’it is efficient’,’like it because it is efficient’],则输出将为[‘efficient’,’durable’,’strong’]。
短语’efficient’在句子0、2和4中出现。它的出现次数最多,因此它会出现在输出结果的开头。短语’durable’和’strong’在句子0和1中出现,而’strong’仅在句子1中出现。因此,这些短语会根据它们在句子中的出现次数逐渐加入到输出结果中。
为了解决这个问题,我们将按照以下步骤处理 –
- cnt :=一个新的映射
- 对于短语中的每个项目,执行以下操作
- cnt [feature]:= 0
- 对于句子中的每个响应,执行以下操作
- p :=一个包含响应单词的新列表
- s :=从p中创建一个新的集合
- 对于s中的每个i,执行以下操作
- 如果 i 存在于 cnt 中,则
- cnt [i]:= cnt [i] +1
- res : = 包含cnt中每个 k 值的对(k, cnt[k])的新列表
- 根据计数k对列表res进行排序
- 返回列表res而不包括计数值k
示例
让我们看一下以下实现以更好的理解 –
def solve(phrases, sentences):
cnt = {}
for feature in phrases:
cnt[feature] = 0
for response in sentences:
p = response.split()
s = set(p)
for i in s:
if i in cnt:
cnt[i] += 1
res = [[k, cnt[k]] for k in cnt]
res.sort(key = lambda x: (-x[1], phrases.index(x[0])))
return [i[0] for i in res]
print(solve(['strong', 'durable', 'efficient'], ['the product is durable and efficient', 'strong and durable', 'it is efficient', 'like it because it is efficient']))
输入
['strong', 'durable', 'efficient'],['the product is durable and efficient','strong and durable','it的efficient','like it because it is efficient']
输出
['efficient', 'durable', 'strong']