基于Python的短语出现次数排序算法程序

基于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']

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程