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\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++;
    }

 

 

 (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++;
    }

 

 

 总结:

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

二、PSP

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

                                 实际花费时间(min)               

分析时差原因

功能一实现                        

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

转载于:https://www.cnblogs.com/qiwh/p/11523930.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值