Unix中如何统计指定词组出现次数并比较最大值?
嗨,这个问题我之前也碰到过!单个单词的统计逻辑确实没法直接用来算连续词组的出现次数——毕竟你要的是a b这种连续出现的固定搭配,不是a和b各自出现次数的总和(毕竟a后面可能跟着别的词,不是b呀)。
为什么不能用单单词统计求和?
举个简单例子:如果文件内容是"a x b a b",单单词统计会得到a出现2次、b出现2次,加起来4次,但实际a b只出现了1次,完全对不上。所以求和的思路根本不准确,别浪费时间啦~
更合适的替代代码(Python示例)
直接统计连续的单词二元组才是正确的思路,这里给你写个实用的版本:
from collections import defaultdict # 初始化统计字典,默认值为0 phrase_counts = defaultdict(int) # 读取目标文件 with open('simple.txt', 'r') as f: # 把文件内容按空格分割成单词列表 words = f.read().split() # 遍历生成所有连续的单词对 for i in range(len(words) - 1): # 拼接成词组 current_phrase = f"{words[i]} {words[i+1]}" phrase_counts[current_phrase] += 1 # 查看目标词组的次数 target1 = 'a b' target2 = 'c d' count1 = phrase_counts.get(target1, 0) count2 = phrase_counts.get(target2, 0) print(f"词组 '{target1}' 出现了 {count1} 次") print(f"词组 '{target2}' 出现了 {count2} 次") # 比较结果 if count1 > count2: print(f"结论:'{target1}' 出现次数更多") elif count1 < count2: print(f"结论:'{target2}' 出现次数更多") else: print("结论:两个词组出现次数相同")
进阶优化:处理标点和大小写
如果你的文件里有标点(比如"a b,")或者大小写差异(比如"A B"和"a b"),可以加一点预处理,确保统计更准确:
import string from collections import defaultdict phrase_counts = defaultdict(int) with open('simple.txt', 'r') as f: # 转成小写,消除大小写差异 text = f.read().lower() # 去掉所有标点符号 text = text.translate(str.maketrans('', '', string.punctuation)) words = text.split() for i in range(len(words) - 1): current_phrase = f"{words[i]} {words[i+1]}" phrase_counts[current_phrase] += 1 # 后续统计逻辑和上面一致 count1 = phrase_counts.get('a b', 0) count2 = phrase_counts.get('c d', 0) # ...(省略重复的打印和比较代码)
运行方法很简单:把代码存成count_phrases.py,和simple.txt放在同一个文件夹里,执行python count_phrases.py就能看到结果啦。
内容的提问来源于stack exchange,提问作者Parth Parikh
相关产品推荐
相关产品推荐

