文档词频统计

一、计划

首先鉴于之前只学习过c程序和java程序的语法,对c++/c#一无所知,学习语法大约5小时。

虽然上学期写过一个类似的java程序,但感觉功能还是有些区别,而且java与c++的方法好多不同,所以并不能直接在其基础上修改。写各个小功能的函数3小时,写递归函数扫描文件夹3小时。

完成之后还需要对程序进行优化,大约预计这部分用大约3小时。

二、实际用时

实际的用时比自己的预想要差一些,学习c++语法比预想要快一些,用了3个小时左右,简单浏览了一次语法,觉得和之前掌握的c和java都有接近的地方,虽然到实战的时候还是需要查阅书籍或者百度用法。

这些小函数的编写用时较长,大约够6个小时。每个编写的小函数都需要进行一次测试,而且各种问题不断,修改这些bug用时较长。

主递归函数实在不知道如何访问目录,或者判断一个文件是文件还是目录,就只好百度,最后找到一个接近的,在其基础上进行了改动,最后成功了。但这部分在百度之前的各种查资料费时较多,之后的调试过程用时也不短。这个过程历时大约6小时。

在单个单词的程序完成后,对程序进行修改,使其支持双单词和三单词的统计。算法的构思用时2小时,实现用时3小时(这个过程走了弯路,开始对要求理解错误,设计成了同时统计单个单词、双单词、三单词,之后的改动用了也够半个小时)。

由于deadline快到了,时间不多了,所以优化部分做的有些不足,大约用时3个小时。

三、性能分析

1. 在优化的时候,将单个单词、双单词、三单词的输出函数合并为一个函数。

2.对最终输出文件的位置进行修改,使其不放在所搜索的文件夹,而放在初始文件夹中。

3.对三单词的统计不用连接三个单词,而调用连接双单词的中间结果。

4.由于在输出时,标准输出没有任何输出内容,所以可能不知道程序进行到何种程度,故增加了将扫描的文件的完整路径打印出来这一步,虽然可能对性能有些损失。

5.由于对链表的排序感觉有些难度,所以最开始用了冒泡排序,在优化时仿照插入排序改为了逐个插入的排序方法。

Ps:优化前的性能分析未截图,故只有最终的性能分析。

四、测试

PS:空文件夹测试过没有问题,这里没有当做测试点

1. 测试两个单词循环,但大小写不相同(仅三个单词)。输入“C:\Users\CSJ\Desktop\test”,源文件

输出结果

2. 测试其他符号对单词的识别能力(对单词的判定,如数字开头不是单词),输入“C:\Users\CSJ\Desktop\test”,源文件

输出

3. 测试其他符号对单词的分隔作用,输入“C:\Users\CSJ\Desktop\test”,源文件

输出(PS:输出过多,部分截取)

4.测试单词中含有数字,输入“C:\Users\CSJ\Desktop\test”,

源文件

输出

5. 测试多个文件,输入“C:\Users\CSJ\Desktop\test”,

源文件

输出

6. 测试多种格式的文件的识别能力,输入“C:\Users\CSJ\Desktop\test”,

源文件

输出

PS:每个单词在每个文件中出现均为一次,所以出现四次,证明四个文件都扫描过。

7. 测试双单词之间的分隔符号识别能力,输入“-e2 C:\Users\CSJ\Desktop\test”,

源文件

输出

8. 测试三单词的识别能力,输入“-e2 C:\Users\CSJ\Desktop\test”

源文件

输出

9. 测试多层目录的文件查找能力(同一个文件放入不同深度的五个文件),输入“C:\Users\CSJ\Desktop\test”

源文件

输出

PS:每个单词在每个文件中出现均为一次或者6次,所以出现5次或者30次,证明5个文件都扫描过。

10. 测试两个连续单词统计中,同义单词反复出现的识别能力,
输入“-e2 C:\Users\CSJ\Desktop\test”

源文件

输出

PS:file的16个不同的大小写形式出现,视为同一个单词,所以任意两个相邻的file可以认为是相同的,故统计为15次。

五、感想

这次的编程作业是我做过的要求极为细致的程序之中,规模最大的一次,所以对输出格式的修改也耗了不少的时间,这给了我一个警示,以后编写代码,要看清楚要求,否则会有很多的后续麻烦。这次的程序在调试过程中,也是各种问题接连出现。比如在刚刚用逐个插入的算法排序之后,最终的输出结果顺序总有问题。找了好长时间,终于发现是判断某个节点是否插入到链表的头节点位置时,作比较的节点选择错误,本来应该是T,结果我写成了T->nextWord。这让我明白,如果要作为程序员,对函数的算法要做到心中有数,一点小小的bug都有可能导致结果的彻底错误。当然这次最大的收获,应当说是我大致上学会了C++的语法,又多了一份技能。

看过张艺的blog之后,心中突然产生共鸣。要不是上个学期在吴际老师的强压之下编程,突然碰到这样的一个程序,可能真的无从下手,所以在此对这个曾经十分反感的老师说声谢谢!

时间: 2024-10-08 13:16:55

文档词频统计的相关文章

Spark WordCount 文档词频计数

一.使用数据 Apache Spark is a fast and general-purpose cluster computing system.It provides high-level APIs in Java, Scala, Python and R, and an optimized engine that supports general execution graphs. It also supports a rich set of higher-level tools inc

结对&词频统计

结对编程 Pathner 濮成林(博客:http://www.cnblogs.com/charliePU/) 1.词频统计 环境依赖: 开发环境.myeclipse 2013, jdk1.7.0_04, echart.mini.js, tomcat 7.0. 运行环境.tomcat 7.0, jre7. 对濮成林词频统计进行需求的再讨论 确定输入:TXT格式纯英文文档大小不超过10M 分析结果排序:按顺序输出前N个 结果显示内容:显示内容在原有基础上增加排序结果显示.增加文章标题显示.修改横坐标

个人作业——词频统计

本次编程项目的主题为英文单词词频统计,主要分为下面四个小项目: 1.统计已存在的文档中的英文单词词频统计,并降序输出: 2.用户输入文件名,程序对其中的内容进行词频统计并降序输出: 3.用户输入指定文件夹的路径,程序遍历路径下的所有文件,并分别对其中的内容进行词频统计,降序输出前10个单词的词频: 4.用户在控制台按照要求输入文本内容,并将输入的内容存入指定文本中,程序对输入的内容进行词频统计并降序输出. 我在本科学期间进行过C/C++的学习,所以本次作业使用的语言为C++,使用codebloc

全文搜索怎么给查询语句与文档相关性打分

朴素想法 用户输入一个查询query,query由若干词(term)组成,文档也由若干词(term)组成.那么怎么评判查询和文档的相关性的高低. 很朴素简单的想法就是文档中包含的term与查询query中包含的term,两者越多相同的则说明越相关.比如query为"animal cat",文档一内容为"cat dog bird animal",文档二内容为"cat dog bird tiger",则认为query与文档二的相关性比文档一的高. 词

esdoc 自动生成接口文档介绍

官网 ESDoc:https://esdoc.org/ JSDoc:http://usejsdoc.org/ 介绍 ESDoc 是一个根据 javascript 文件中注释信息,生成 JavaScript 应用程序或库.模块的 API 文档的工具.具有文档覆盖率统计.系统手册.一体化测试.详细接口说明等特点. ESDoc 与 JSDoc 对比 JSDoc 是目前最火的文档生成工具,它存在的时间也比较长,但是功能上还欠缺一些,比如文档覆盖率.自动测试.搜索等,都没有实现.并且它的使用比较复杂,需要

python统计文档中词频

python统计文档中词频的小程序 python版本2.7 程序如下,测试文件与完整程序在我的github中 1 #统计空格数与单词数 本函数只返回了空格数 需要的可以自己返回多个值 2 def count_space(path): 3 number_counts = 0 4 space_counts = 0 5 number_list = [] 6 7 with open(path, 'r') as f: 8 for line in f: 9 line = line.strip() 10 sp

C语言K&R习题系列——统计文档中每个单词所占字母个数,以直方图形式输出

原题: Write a program to print a histogram of the lengths of words in its input. It is easy to draw the histogram with the bars horizontal; a vertical orientation is more challenging. 这也是我第一个过百行的代码(带注释,空格什么的) 主要分两个部分:输入和输出 #include < stdio.h > #define

Lucene in action 笔记 term vector——针对特定field建立的词频向量空间,用cos计算针对该field的文档相似度

摘自:http://blog.csdn.net/fxjtoday/article/details/5142661 Leveraging term vectors所谓term vector, 就是对于documents的某一field,如title,body这种文本类型的, 建立词频的多维向量空间.每一个词就是一维, 这维的值就是这个词在这个field中的频率. 如果你要使用term vectors, 就要在indexing的时候对该field打开term vectors的选项: Field op

机器学习入门-文本数据-构造Tf-idf词袋模型(词频和逆文档频率) 1.TfidfVectorizer(构造tf-idf词袋模型)

TF-idf模型:TF表示的是词频:即这个词在一篇文档中出现的频率 idf表示的是逆文档频率, 即log(文档的个数/1+出现该词的文档个数)  可以看出出现该词的文档个数越小,表示这个词越稀有,在这篇文档中也是越重要的 TF-idf: 表示TF*idf, 即词频*逆文档频率 词袋模型不仅考虑了一个词的词频,同时考虑了这个词在整个语料库中的重要性 代码: 第一步:使用DataFrame格式处理数据,同时数组化数据 第二步:定义函数,进行分词和停用词的去除,并使用' '连接去除停用词后的列表 第三