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 词频统计_第1张图片

 

 

 (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\n",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\n",x[j],i);
        z++;
    }

3 词频统计_第2张图片

 

 

 (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\n",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\n",x[j],i);
        z++;
    }

3 词频统计_第3张图片

 

 

 总结:

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

二、PSP

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

                                 实际花费时间(min)               

分析时差原因

功能一实现                        

60                              170 对于文本读入方法,词汇统计的方法不熟悉,不知道如何运用。
功能一测试 30 60 文本的存放路径不对,存放词汇的数组大不准确,语法上的问题
功能二实现 80 160 词汇量增多,需要统计不重复词汇数量,命令行输入英文作品的文件名没有实现,尝试了很多办法都没有成功
功能二测试 30 40 能实现词汇出现次数的统计,但是有些功能实现不了
功能三实现 90 75 命令行输入英文作品的文件名没有实现,导致命令行输入存储有英文作品文件的目录名,批量统计也没有实现查阅的博客还是没弄懂
功能四实现 100 120 根据理解编写的程序只能直接打开文件进行词汇的统计,无法从命令行存储作品名

你可能感兴趣的:(3 词频统计)