使用python从文本文件中返回唯一单词出现的总和

时间:2018-04-11 17:23:14

标签: python

我正在尝试更新我的一个旧剧本。通常,如果列表中的任何项目出现在该行中,则此脚本将仅记录“1”。但是,现在我想要计算并计算任何这些独特单词出现在该行中的次数。例如,使用此列表:

ess = ['jim','bob','sally','tom']
.
.
.   
elif 'SCHOOL' in line:
    csvfile.write( str(line.count(',') + 1)+ ',')
    flag = 0
    for staff in ess:
      if staff in line:
        csvfile.write('1')
        flag = 1
        break
    if flag == 1:
      csvfile.write('\n')
    else:
      csvfile.write('0\n')

如果出现任何名称,而不是简单地记录“1”。我希望它返回该行中出现的名称数量的总和。例如,如果jim和sally都出现在该行中,则返回“2”

2 个答案:

答案 0 :(得分:0)

你可以简单地对字符串/句子运行多次计数。

或者您可以通过“”(空格)分隔符split句子并查看返回的列表并检查每个单词是否等于您想要的单词之一:

我会做那样的事情:

 sum = 0
 for line in lines:
     split_list = line.split(" ")
     for word in ess:
         if word in split_list :
             sum+=1

或替代方案:      sum = 0      换行:          在ess中的单词:              sum + = line.count(word)

答案 1 :(得分:0)

有两种方法可以尝试:

1)只要名称出现至少一次,您就不关心名称出现在句子中的次数:

def names_in_sentence(sentence_str):
    return sum([1 for name in lis_names if name in sentence_str])

这是一种相当pythonic的方式。我正在使用列表推导为输入句子中的每个名称创建一个1的列表。

2)你确实关心一个名字出现在句子中的次数。即如果句子是"这是一个鲍勃,他是非常棒的,你会回来2:

def names_in_sentence(sentence_str):
    return sum([sentence.count(name) for name in lis_names])

在这种情况下,我使用列表理解来计算每个名称在句子中出现的次数,并对列表求和。