zoukankan      html  css  js  c++  java
  • 文本词频同意问题分析

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

    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 应用问题的扩展

    • 《红楼梦》、《西游记》、《水浒传》…
    • 政府工作报告、科研论文、新闻报道 …
    • 进一步呢? 未来还有词云…
    在当下的阶段,必将由程序员来主导,甚至比以往更甚。
  • 相关阅读:
    [转发]深入理解git,从研究git目录开始
    iOS系统网络抓包方法
    charles抓包工具
    iOS多线程中performSelector: 和dispatch_time的不同
    IOS Core Animation Advanced Techniques的学习笔记(五)
    IOS Core Animation Advanced Techniques的学习笔记(四)
    IOS Core Animation Advanced Techniques的学习笔记(三)
    IOS Core Animation Advanced Techniques的学习笔记(二)
    IOS Core Animation Advanced Techniques的学习笔记(一)
    VirtualBox复制CentOS后提示Device eth0 does not seem to be present的解决方法
  • 原文地址:https://www.cnblogs.com/randysun/p/11213445.html
Copyright © 2011-2022 走看看