统计共现词

mengxiaodan 2015-10-22 11:22:12
请问有哪个大神会用C++统计一篇中文文本的共现词次数,写了几天实在写不出来了,急求,老师明天就要看
...全文
480 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2015-10-30
  • 打赏
  • 举报
回复
还是问你的老师吧。
mengxiaodan 2015-10-30
  • 打赏
  • 举报
回复
引用 9 楼 zhao4zhong1 的回复:
#include <fstream>
#include <iostream>
#include <string>
#include <vector>
#include <locale>
using namespace std;
int main() {
    vector <wstring> vws;
    wstring ws;
    wifstream wifs;
    wifs.imbue(locale("chs"));
    wifs.open("u.txt", wifstream::in);
    int i=0;
    while (1) {
        wifs>>ws;
        vws.push_back(ws);
        if (!wifs.good()) break;
        i++;
    }
    wifs.close();
    int n=i;
    wcout.imbue(locale("chs"));
    for (i=0;i<n;i++) {
        wcout<<vws[i]<<endl;
    }
    return 0;
}
不要取回本地,用一个vector存一句话,再嵌套一个vector存整个文本,就这样: vector<vector<string>>txt; vector<string>str infilr>>str;? 我老师说先统计各个词的词频,形成矩阵的列数和行数,然后再用指针定位在某一个词上,向前和向后读,只要两个词在同一个句子里同时出现,对应的矩阵元素就加1,最后把矩阵存入文本中,应该怎么弄啊,老师?
赵4老师 2015-10-27
  • 打赏
  • 举报
回复
#include <fstream>
#include <iostream>
#include <string>
#include <vector>
#include <locale>
using namespace std;
int main() {
    vector <wstring> vws;
    wstring ws;
    wifstream wifs;
    wifs.imbue(locale("chs"));
    wifs.open("u.txt", wifstream::in);
    int i=0;
    while (1) {
        wifs>>ws;
        vws.push_back(ws);
        if (!wifs.good()) break;
        i++;
    }
    wifs.close();
    int n=i;
    wcout.imbue(locale("chs"));
    for (i=0;i<n;i++) {
        wcout<<vws[i]<<endl;
    }
    return 0;
}
mengxiaodan 2015-10-27
  • 打赏
  • 举报
回复
引用 3 楼 zhao4zhong1 的回复:
#include <fstream>
#include <iostream>
#include <string>
using namespace std;
int main() {
    static wstring ws[1000];
    wifstream wifs;
    int i=0;
	wifs.imbue(locale("chs"));
    wifs.open("test.txt", wifstream::in);
    while (1) {
        wifs>>ws[i];
        if (!wifs.good()) break;
        i++;
        if (i>=1000) break;
    }
    wifs.close();
    int n=i;
	wcout.imbue(locale("chs"));
    for (i=0;i<n;i++) wcout<<ws[i]<<endl;
    return 0;
}
如果读入vector中,再怎么弄啊
mengxiaodan 2015-10-27
  • 打赏
  • 举报
回复
引用 3 楼 zhao4zhong1 的回复:
#include <fstream>
#include <iostream>
#include <string>
using namespace std;
int main() {
    static wstring ws[1000];
    wifstream wifs;
    int i=0;
	wifs.imbue(locale("chs"));
    wifs.open("test.txt", wifstream::in);
    while (1) {
        wifs>>ws[i];
        if (!wifs.good()) break;
        i++;
        if (i>=1000) break;
    }
    wifs.close();
    int n=i;
	wcout.imbue(locale("chs"));
    for (i=0;i<n;i++) wcout<<ws[i]<<endl;
    return 0;
}
我老师说存入vector中,再提取共现词矩阵,请问可以指导一下吗?
mengxiaodan 2015-10-27
  • 打赏
  • 举报
回复
引用 4 楼 bjym1987 的回复:
你这是统计字还是词? 词不还得分词么?
我已经分完词了
赵4老师 2015-10-22
  • 打赏
  • 举报
回复
提醒:使用wchar_t、wstring、wifstream、wcout
ooolinux 2015-10-22
  • 打赏
  • 举报
回复
词难道要一个常用词表来一一比对?
老王爱上猫 2015-10-22
  • 打赏
  • 举报
回复
你这是统计字还是词? 词不还得分词么?
赵4老师 2015-10-22
  • 打赏
  • 举报
回复
#include <fstream>
#include <iostream>
#include <string>
using namespace std;
int main() {
    static wstring ws[1000];
    wifstream wifs;
    int i=0;
	wifs.imbue(locale("chs"));
    wifs.open("test.txt", wifstream::in);
    while (1) {
        wifs>>ws[i];
        if (!wifs.good()) break;
        i++;
        if (i>=1000) break;
    }
    wifs.close();
    int n=i;
	wcout.imbue(locale("chs"));
    for (i=0;i<n;i++) wcout<<ws[i]<<endl;
    return 0;
}
mengxiaodan 2015-10-22
  • 打赏
  • 举报
回复
引用 1 楼 zhao4zhong1 的回复:
提醒:使用wchar_t、wstring、wifstream、wcout
老师可以给个简单的小程序参考一下吗?

65,210

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧