• 文本词频同意问题分析


    一、文本词频同意问题分析

    1.1 问题分析

    文本词频统计

    • 需求:一篇文章,出现了哪些词?哪些词出现得最多?
    • 该怎么做呢?

    英文文本 --> 中文文本

    • 英文文本:Hamet 分析词频

    • 中文文本:《三国演义》 分析人物

    二、 Hamlet英文词频统计实例讲解

    042-实例10-文本词频统计-01.jpg?x-oss-process=style/watermark

    • 文本去噪及归一化
    • 使用字典表达词频
    f = open(r"E:python实训python预科班day06hamlet.txt", "r", encoding="utf-8")
    # 读取文件
    data = f.read().lower()
    # 通过" "切割单词
    data_split = data.split(" ")
    
    # 统计数据
    count_data = {}
    
    # 统计单词出现的次数
    for word in data_split:
    
        # 判断词是否再字典中
        if word in count_data:
            count_data[word] += 1
        else:
            count_data[word] = 1
    
    # item获取键值对(一个一个元组存放0),将所有键值对通过元组存放
    data_items = count_data.items()
    # 将元组转换成list
    list_item = list(data_items)
    
    
    def func(i):
        """排序"""
        return i[1]
    
    
    # 降序
    list_item.sort(key=func, reverse=True)
    # 出现最多的前十个单词
    res_data = list_item[:10]
    
    for word in res_data:
        print(f"{word[0]: ^7} {word[1]: ^5}")
    
    f.close()
    
    

    结果:

    the 791
    and 596
    of 527
    to 508
    a 376
    my 375
    in 320
    you 314
    i 291
    his 235

    • 运行结果由大到小排序
    • 观察单词出现次数

    三、《三国演义》人物出场统计实例讲解

    042-实例10-文本词频统计-02.jpg?x-oss-process=style/watermark

    • 中文文本分词
    • 使用字典表达词频
    • 中文文本分词
    • 使用字典表达词频
    • 扩展程序解决问题
    • 根据结果进一步优化
    import jieba
    
    """
    @author RansySun
    @create 2019-07-19-11:08
    """
    
    f = open(r"E:python实训python预科班day06	hreekingdoms.txt", encoding="utf8")
    data = f.read()
    # 切割中文
    data_jieba = jieba.lcut(data)
    
    count_dic = {}
    
    for word in data_jieba:
    
        # 去除长度为一的逗号,句号(无意义词)等
        if len(word) == 1:
            continue
    
        # 去除不是人物词
        if word in {"将军", "却说", "荆州", "二人", "不可", "今日", "不能", "不敢", "丞相", "今日", "关公", "天下", "东吴", "于是", "如此", "次日", "大喜", "商议"}:
            continue
    
        
        if "曰" in word:
            word = word[:-1]
        if word in count_dic:
            count_dic[word] += 1
        else:
            count_dic[word] = 1
    
    def func(i):
        return i[1]
    
    data_list = list(count_dic.items())
    data_list.sort(key=func, reverse=True)
    
    data_res = data_list[:10]
    print(data_res)
    for data in data_res:
        print(f"{data[0]: ^5} {data[1]: ^7}")
    
    

    结果:
    孔明 1226
    玄德 975
    曹操 953
    张飞 358
    吕布 300
    赵云 278
    刘备 277
    云长 265
    孙权 264
    魏兵 233

    四、文本词频统计举一反三

    4.1 应用问题的扩展

    • 《红楼梦》、《西游记》、《水浒传》…
    • 政府工作报告、科研论文、新闻报道 …
    • 进一步呢? 未来还有词云…
    在当下的阶段,必将由程序员来主导,甚至比以往更甚。
  • 相关阅读:
    MySQL高级查询总结
    MySQL数据库作业
    MySQLdump备份还原命令
    MySQL之Join
    MySQL课堂作业(一)
    Mysql数据库
    Js实例之简易计算器
    JS系统函数
    js课堂作业之转换月份
    C++ Name Mangling 为什么不编码返回值参数
  • 原文地址:https://www.cnblogs.com/randysun/p/11213445.html
Copyright © 2020-2023  润新知