zoukankan      html  css  js  c++  java
  • 词频统计实现方法大致思路(软工个人作业一)

    基本功能

    1. 统计文件的字符数
    2. 统计文件的单词总数
    3. 统计文件的总行数
    4. 统计文件中各单词的出现次数
    5. 对给定文件夹及其递归子文件夹下的所有文件进行统计
    6. 统计两个单词(词组)在一起的频率,输出频率最高的前10个。
    7. 在Linux系统下,进行性能分析,过程写到blog中(附加题)

    数据结构:
    characterNum 字符数  全局变量
    wordNum   单词总数 全局变量
    lineNum   总行数  全局变量
    采用结构体数组(动态内存)存储单词及其出现次数

    struct wordInfo {
     char* wordStr;
     int*  nextWordFrequency[26];
     int   frequency;
    };
    struct alphaArray {
     wordInfo* wordArray;
     int       total;
    };

    alphaArray dictionary[26];

    遍历文件的方法:
    _findfirst,_findnext函数实现,参考例程:https://www.cnblogs.com/ranjiewen/p/5960976.html

    实现方案:
    初始化各变量
    遍历给定文件夹中的每个文件
    只读方式打开符合要求的文件
    单词统计
    循环至所有文件遍历完成
    关闭文件
    输出统计结果

    单词统计函数:
    遍历字符并统计
    判断是否是换行符并统计
    建立缓冲区域存储一个单词中连续的字符
    采集单词字符串
    生成单词的哈希值(散列函数使用ELFHash、冲突解决方案采用二次探测)
    根据首字母和哈希值确定单词的存储位置并存储单词信息
    将当前单词的存储位置映射到前一个单词的nextWordFrequency[26][]矩阵当中,实现词组频率统计

    统计规则:
    http://www.cnblogs.com/denghp83/p/8627840.html

    统计方法:
    1.判断是否是ASCII码字符,若是,字符计数加一;若是换行符,行数加一
    2.将间隔符之间的内容读入临时数组,用变量记录最后一个字母在数组中的位置
    3.提取单词主体(除去最后的数字部分),产生哈希值
    4.根据哈希值查找对应单元是否已经存在该单词,若存在,则该单词频率加一且按照词典顺序更新单词;若不存在,根据散列函数继续查找,直到找到同样的单词或者空闲的空间,更新或者记录单词信息

  • 相关阅读:
    Go语言和ASP.NET的一般处理程序在处理WEB请求时的速度比较
    XAML中特殊符号书写
    Sqlite执行insert or ignore 或insert or replace语句。
    对于项目编译时自动使用代码混淆的方法。
    Windows服务安装与控制
    PostgreSQL数据库中获取表主键名称
    开源框架
    RT/Metro商店应用如何调用SQLite数据库
    RT/Metro商店应用如何如何获取图片的宽高
    android中PreferenceScreen类的用法
  • 原文地址:https://www.cnblogs.com/ustckx16/p/8627745.html
Copyright © 2011-2022 走看看