• 3 词频统计


    此作业的要求参见[https://edu.cnblogs.com/campus/nenu/2019fall/homework/6583]

    代码地址[https://e.coding.net/gitli/cihuitongji1.git]

    词频统计 SPEC 

    一、项目的重难点

    (1)功能1文件的读取

    我使用的c语言进行编写,之前没做过读入文件的题目,在网上查了一些相关资料以及一些语句的编写,使用的fopen方法。

    主要代码:

    in = fopen("book.txt","r");

    (2)功能2主要代码

     FILE *in,*out;
        int i,l,j,z;
        in = fopen("book.txt","r");
        out = fopen("books.txt","w");
        
        l = fread(s,1,7000010,in);
        for (i = 0; i < l; ++i)
            s[i] = tolower(s[i])-'a';
        tot = i = 0;

     (3)功能3主要代码

     FILE *in,*out;
        int i,l,j,z;
        in = fopen("book.txt","r");
        out = fopen("books.txt","w");
        
        l = fread(s,1,7000010,in);
        for (i = 0; i < l; ++i)
            s[i] = tolower(s[i])-'a';
        tot = i = 0;
        while (i < l)
        {
            p = 0 ;
            while (find(s[i]))
            {
                    if (!b[p][s[i]])
                        b[p][s[i]] = (++tot);
                    p = b[p][s[i]];
                    i++;
            }
            num[p]++;
            i++;
        }
        
        n = 0;
        num[0] = 0;
        dfs(0,0);//深度搜索函数 
        
        for (i = 60000; i >= 1; --i)
        for (j = first[i]; j != 0; j = next[j])
                fprintf(out,"%s %d
    ",x[j],i);
        z = 0;
        for (i = 60000; i >= 1; --i)
        for (j = first[i]; j != 0 && z < 100; j = next[j])
        {
            printf("%s %d
    ",x[j],i);
            z++;
        }

     (4)功能4主要代码

    int main(int argc, const char * argv[])
    {
        FILE *in,*out;
        int i,l,j,z;
        in = fopen("book123.txt","r");
        out = fopen("books.txt","w");
        
        l = fread(s,1,7000010,in);
        for (i = 0; i < l; ++i)
            s[i] = tolower(s[i])-'a';
        tot = i = 0;
        while (i < l)
        {
            p = 0 ;
            while (find(s[i]))
            {
                    if (!b[p][s[i]])
                        b[p][s[i]] = (++tot);
                    p = b[p][s[i]];
                    i++;
            }
            num[p]++;
            i++;
        }
        
        n = 0;
        num[0] = 0;
        dfs(0,0);//深度搜索函数 
        
        for (i = 60000; i >= 1; --i)
        for (j = first[i]; j != 0; j = next[j])
                fprintf(out,"%s %d
    ",x[j],i);
        z = 0;
        for (i = 60000; i >= 1; --i)
        for (j = first[i]; j != 0 && z < 100; j = next[j])
        {
            printf("%s %d
    ",x[j],i);
            z++;
        }

     总结:

    之前没有做过类似的题目,本来想用Python写的,但是现学一门语言感觉会做不完作业,所以选择了C语言。对于文本的读入我想到的是直接用fopen方法,可以直接进行文本的读取。统计每个词汇出现的次数时要把存放词汇的数组设置的足够大,要不很容易运行不出结果。但是功能中所说的在命令行输入存储有英文作品文件的目录名,批量统计还有不重复的统计出单词的数量,我在网上查找了相关知识以及博客,实在没有看懂,对我来说太难了。在编写的过程中出现了很多的错误,也看出自己的编程基础是十分薄弱,有难度的题目就无从下手,接下来要一步一步的学习Python这门语言,希望能在这门语言中找到这道题目的答案。

    二、PSP

    PSP阶段                         预计花费时间(min)

                                     实际花费时间(min)               

    分析时差原因

    功能一实现                        

    60                              170 对于文本读入方法,词汇统计的方法不熟悉,不知道如何运用。
    功能一测试 30 60 文本的存放路径不对,存放词汇的数组大不准确,语法上的问题
    功能二实现 80 160 词汇量增多,需要统计不重复词汇数量,命令行输入英文作品的文件名没有实现,尝试了很多办法都没有成功
    功能二测试 30 40 能实现词汇出现次数的统计,但是有些功能实现不了
    功能三实现 90 75 命令行输入英文作品的文件名没有实现,导致命令行输入存储有英文作品文件的目录名,批量统计也没有实现查阅的博客还是没弄懂
    功能四实现 100 120 根据理解编写的程序只能直接打开文件进行词汇的统计,无法从命令行存储作品名
  • 相关阅读:
    闭包
    laravel 控制器
    laravel 模板
    laravel 视图
    laravel 请求
    laravel 分页
    解决启动Apache遇到的问题Permission denied: AH00072: make_sock: could not bind to address 0.0.0.0:8888
    一张号称一篇程序覆盖Python基础的代码
    [转载]激活Navicat Premium
    C语言自定义函数的形参为数组时需要注意传入长度
  • 原文地址:https://www.cnblogs.com/qiwh/p/11523930.html
Copyright © 2020-2023  润新知