c++实现词频统计

需求:从一个英文txt中读取内容,实现词频统计。

现完成:基本功能大概完成了,由于编程基础比较差,文件操作部分还不是很熟练,我发现从文件中提取字符串流读取到程序的string对象中,会把所有的空格过滤掉,导致没法统计单词频率,目前还没找到解决方法,只能先手动输入文章了。ORZ...

好好学习java,目前看来,处理字符串等问题还是java有成熟的解决方案。

  1 /**
  2  * 对一段英文的词频统计
  3
  4  */
  5 #include <iostream>
  6 #include <string>
  7
  8 using namespace std;
  9 /**
 10  * 单词对象
 11  */
 12 struct Word
 13 {
 14     Word() : Str(""), Count(0)
 15     {}
 16     string Str;
 17     int Count;
 18
 19     /**
 20      * 交换单词(用于排序)
 21      *  word 交换的单词对象
 22      */
 23     void exchange(Word &word)
 24     {
 25         string tStr = word.Str;
 26         int tCount = word.Count;
 27         word.Str = Str;
 28         word.Count = Count;
 29         Str = tStr;
 30         Count = tCount;
 31     }
 32 };
 33
 34 /**
 35  * 统计词频
 36  * words 单词数组
 37  * newWord 单词内容
 38  *  size 单词总数
 39  */
 40 void CalcCount(Word * words, string &newWord, int size)
 41 {
 42     int i = 0;
 43     for(; i < size; i++)
 44     {
 45         if(words[i].Str == newWord)
 46         {
 47             words[i].Count++;
 48             return;
 49         }
 50         else if(words[i].Str == "")
 51             break;
 52     }
 53     words[i].Str = newWord;
 54     words[i].Count = 1;
 55 }
 56
 57
 58 void SortWordDown(Word * words, int size)
 59 {
 60     for(int i = 0; i < size; i++)
 61     {
 62         for(int j = 0; j < size-1; j++)
 63         {
 64             if(words[j].Count <  words[j+1].Count)
 65             {
 66                 words[j].exchange(words[j+1]);
 67             }
 68         }
 69     }
 70 }
 71
 72 int main()
 73 {
 74     Word * words;
 75     string content;
 76     cout << "输入一段英文:";
 77     getline(cin, content);
 78
 79     //计算单词总数
 80     int wCount = 1;
 81     for(unsigned int i = 0; i < content.length(); i++)
 82     {
 83         if(content[i] == ‘ ‘)
 84             wCount++;
 85     }
 86     words = new Word[wCount];
 87
 88     string::size_type offset = content.find(‘ ‘);//单词都是以空格隔开
 89     while(offset != string::npos)
 90     {
 91         string wStr = content.substr(0, offset);
 92         content.erase(0, offset+1);
 93         CalcCount(words, wStr, wCount);
 94         offset = content.find(‘ ‘);
 95     }
 96     CalcCount(words, content, wCount);//计算最后一个单词
 97
 98     SortWordDown(words, wCount);
 99     int printCount = wCount ;
100
101     for(int i = 0; i < printCount; i++)
102     {
103         cout << words[i].Str << "\t" << words[i].Count <<  endl;
104     }
105
106     delete [] words;
107     return 0;
108 }
时间: 2024-10-09 20:11:12

c++实现词频统计的相关文章

词频统计-单元测试

我自己的单元测试没有弄出来,我用c编的,在visual studio中貌似实现不了单元测试,而李俞寰同学是用c#编写的词频统计,在vs2015中实现单元测试无比的方便,所以我请教了他并借鉴了一下. [TestMethod()] public void DictionarySortTest() { Dictionary<string,int>input=new Dictionary<string,int>() { {"you,1}, {"are",1},

词频统计-功能一

一.完成一个小程序 我 拿到这个题目之后,就决定用最不熟悉的c#来实现,因为老师说不懂的去学才会有进步.布置任务后的第二天就开始去图书馆借了两本书<c#从入门到精髓>,<c#项目实战>,拿到书之后看了入门书<c#从入门到精髓>,看书的过程时痛苦的,因为发现大二选修课学的c#全交还给老师了,只能重头再学了.唯一有点印象的就是窗口应用程序,基于UI的设计. 写代码首先需要工具,由于电脑上没有visual studio的安装包,当时求助了度娘. 如果没有安装包的同学们,可以借

词频统计效能测试---------第二版

在第一次的词频统计中,对JProfile 款软件不是很熟悉,感觉数据不是很准确,在程序启动时JProfile总是提示Java虚拟机已退出,后来经过查阅知道解决方案:截图如下   要将 keep vm alive 勾选上. 程序总体总体情况如下: 当程序运行之后,cpu和内存的使用几乎在同一时间有一个明显的上升过程. 各个对象使用情况如下 下面是热点函数的展示,这也和我在程序中运用时间戳确定建树函数[generateCharTree()]占用时间较多的情况相符.因为对这个程序来说主要时间都花费在单

结对项目 - 词频统计Ⅱ

目的与要求 代码复审练习 结对练习 编写单元测试 基于上一个结对项目的结果,读取小文本文件A_Tale_of_Two_Cities.txt 或者 大文本文件Gone_with_the_wind.txt,统计某一指定单词在该文本文件中出现的频率. 命令行格式: 提示符> Myapp.exe -f filename.txt -w word (PS:C++ 程序,Java 程序输出方式类似) 解释: 选项 -f 表示打开某一文件 选项 -w 表示统计其后单词在打开的文件中的频率 详细内容 开发语言:J

个人项目——词频统计

前言: 开发工具:Visual Studio 2013 开发语言:C++ 源代码管理工具:Github Github源代码网址:https://github.com/superyy/YY1/blob/master/%E8%AF%8D%E9%A2%91%E7%BB%9F%E8%AE%A1main.cpp 预计各功能所花时间:some hours 实际各功能所花时间:some hours 性能提高所花时间:some hours 要求 :实现一个控制台程序,给定一段英文字符串,统计其中各个英文单词(4

实验二-3 Hadoop&amp;Paoding 中文词频统计

  参考教程 在Hadoop上使用庖丁解牛(较复杂,并未采用,可以之后试试) http://zhaolinjnu.blog.sohu.com/264905210.html Lucene3.3.Lucene3.4中文分词——庖丁解牛分词实例(屈:注意版本) http://www.360doc.com/content/13/0217/13/11619026_266124504.shtml 庖丁分词在hadoop上运行时的配置问题(采纳了一半,没有按照其所写配置dic属性文件) http://f.da

初学Hadoop之中文词频统计

1.安装eclipse 准备 eclipse-dsl-luna-SR2-linux-gtk-x86_64.tar.gz 安装 1.解压文件. 2.创建图标. ln -s /opt/eclipse/eclipse /usr/bin/eclipse #使符号链接目录 vim /usr/share/applications/eclipse.desktop #创建一个  Gnome 启动 添加如下代码: [Desktop Entry] Encoding=UTF-8 Name=Eclipse 4.4.2

第二周作业-词频统计

本周作业是词频统计,编程具体要求如下: https://edu.cnblogs.com/campus/nenu/SWE2017FALL/homework/922 对实现功能进行简要的介绍: 功能一:小文件输入,为表明程序能跑.需要在控制台下输入命令,得到文件中不重复的总单词数.并对单词出现的次数进行排序输出. 功能二:支持命令行输入英文作品的文件名,亲自录入,输出显示不重复单词总数,并对出现频率最高的前10的单词进行输出 功能三:支持命令行输入存储有英文作品文件的目录名,批量统计词频. 功能四:

软件工程第二次作业 词频统计

1.项目名称:词频统计 2.代码地址:https://coding.net/u/songyuu/p/python_wf/git 3.代码如下: 1 import os 2 import re 3 import collections 4 #print(os.getcwd()) #显示wf.py路径 5 #print(os.listdir())#显示目录下的文件 6 file_name=input("wf ") 7 if not os.path.isfile(file_name+'.tx

组合数据类型练习,英文词频统计实例

1.由字符串创建一个作业评分表,做增删改查询统计遍历操作,例如查询第一个3分的下标,统计1分的同学有几个,3分的同学有几个,增删改查等等. 2.字典实例:建立学生学号成绩字典,做增删改查遍历操作. 3.列表,元组,字典,集合的遍历. 4.英文词频统计实例 news = '''When I was young I'd listen to the radio Waiting for my favorite songs When they played I'd sing along, It make