2023.12.31 Python 词频统计

练习:使用Python中的filter、map、reduce实现词频统计

样例数据:

hello world java python
java java hadoop spark
spark python

需求分析:

1- 文件中有如上的示例数据

2- 读取文件内容。可以通过readline()

3- 将一行内容切分得到多个单个的单词。并且对单词进行过滤filter

4- 数据结构转换:将单词放到字典中,

{

"java":1

}

5-从字典中取出key对应的次数,进行累加操作

6-最终就得到结果

 

方法1: 

with open(
        './word_count.txt',mode='w',encoding='utf8'
          )as f:
        f.write("hello world java python java java hadoop spark spark python")

import re
from collections import Counter

# 读取文件
with open('./word_count.txt', 'r') as file:
    text = file.read()

# 将文本转换为小写,并去除标点符号和特殊字符
text = re.sub(r'[^\w\s]', '', text.lower())

# 使用空格分割文本为单词列表
words = text.split()
# ['hello', 'world', 'java', 'python', 'java', 'java', 'hadoop', 'spark', 'spark', 'python']
# 统计词频
word_counts = Counter(words)
print(word_counts)
# Counter({'java': 3, 'python': 2, 'spark': 2, 'hello': 1, 'world': 1, 'hadoop': 1})

方法2:


# 1- 文件中有如上的示例数据
with open('wordcount.txt',mode='r',encoding='UTF-8') as file_obj:

    result_dict = {}

    while True:
        # 2- 读取文件内容。可以通过readline()
        line = file_obj.readline()

        if line=='':
            break

        # 3- 将一行内容切分得到多个单个的单词。并且对单词进行过滤filter
        word_list = line.split()
        # 3.1- 过滤数据
        word_list = filter(lambda word:word!='world',word_list)

        # print(list(word_list),type(list(word_list)))

        # 4- 数据结构转换map:将单词作为key,单词出现的次数作为value
        for word in word_list:

            exist_flag = (word in result_dict.keys())

            if not exist_flag:
                # 4.1- 如果单词在字典中不存在,直接新增一对key-value(1)
                word_num = 1
            else:
                # 4.2- 如果单词在字典中已经存在,那么将value+=1之后更新字典的value
                # 5-从字典中取出key对应的次数,进行累加操作
                word_num += 1

            result_dict[word] = word_num

    # 6-最终就得到结果
    print(result_dict)

  • 10
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

白白的wj

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值