去除停用词

mengxiaodan 2015-05-07 10:47:36
请问ICTCLAS在粉刺钱怎么去除停用词
...全文
1294 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhangsiyututu 2015-07-15
  • 打赏
  • 举报
回复
你那个去停用词程序能运行了吗,我这手头也有个比较棘手的把一篇英文txt根据停用词表进行处理,把其中的停用词去掉,请指教下,
mengxiaodan 2015-06-01
  • 打赏
  • 举报
回复
引用 18 楼 mengxiaodan 的回复:
[quote=引用 17 楼 zhangxiangDavaid 的回复:] 奔跑吧,参考:

/*
1.txt存放文章
table.txt是停词表,每行一个停用词
2.txt是修改后的文章
*/
#include <stdio.h>
#include <wchar.h>
FILE *fi1, *fi2, *fo;
wchar_t buf[256];
wchar_t word[30];
wchar_t table[256][30];
wchar_t *p;
int i, n, N;
int main()
{
	if (NULL == (fi1 = fopen("1.txt", "rb")))
	{
		fprintf(stderr, "Can not open file : 1.txt\n");
		return 1;
	}
	if (NULL == (fi2 = fopen("table.txt", "rb")))
	{
		fprintf(stderr, "Can not open file : table.txt\n");
		fclose(fi1);
		return 1;
	}
	if (NULL == (fo = fopen("2.txt", "wb")))
	{
		fprintf(stderr, "Can not open file : 2.txt\n");
		fclose(fi1);
		fclose(fi2);
		return 1;
	}
	//读入停用词表
	N = 0;
	while (1)
	{
		if (NULL == fgetws(buf, 256, fi2)) break;
		n = wcslen(buf);
		if (L'\r' == buf[0]) continue;   //空行
		buf[n - 2] = L'\0';
		wcsncpy(table[N++], buf, n - 1);
	}
	//根据停用词表,删除文件中出现的停用词
	while (1)
	{
		if (NULL == fgetws(buf, 256, fi1)) break;
		n = wcslen(buf);
		if (L'\r' == buf[0]) continue;   //空行
		buf[n - 2] = L'\0';
		for (i = 0; i < N; i++)
		{
			p = buf;
			n = wcslen(table[i]);
			while (p = wcsstr(p, table[i]))
			{
				wcsncpy(p, p + n, wcslen(p + n) + 1);
			}
		}
		fwprintf(fo, L"%s\r\n", buf);
	}
	fclose(fi1);
	fclose(fi2);
	fclose(fo);
	return 0;
}
谢谢啦[/quote]请问你用的是什么停用词表
mengxiaodan 2015-05-12
  • 打赏
  • 举报
回复
引用 17 楼 zhangxiangDavaid 的回复:
奔跑吧,参考:

/*
1.txt存放文章
table.txt是停词表,每行一个停用词
2.txt是修改后的文章
*/
#include <stdio.h>
#include <wchar.h>
FILE *fi1, *fi2, *fo;
wchar_t buf[256];
wchar_t word[30];
wchar_t table[256][30];
wchar_t *p;
int i, n, N;
int main()
{
	if (NULL == (fi1 = fopen("1.txt", "rb")))
	{
		fprintf(stderr, "Can not open file : 1.txt\n");
		return 1;
	}
	if (NULL == (fi2 = fopen("table.txt", "rb")))
	{
		fprintf(stderr, "Can not open file : table.txt\n");
		fclose(fi1);
		return 1;
	}
	if (NULL == (fo = fopen("2.txt", "wb")))
	{
		fprintf(stderr, "Can not open file : 2.txt\n");
		fclose(fi1);
		fclose(fi2);
		return 1;
	}
	//读入停用词表
	N = 0;
	while (1)
	{
		if (NULL == fgetws(buf, 256, fi2)) break;
		n = wcslen(buf);
		if (L'\r' == buf[0]) continue;   //空行
		buf[n - 2] = L'\0';
		wcsncpy(table[N++], buf, n - 1);
	}
	//根据停用词表,删除文件中出现的停用词
	while (1)
	{
		if (NULL == fgetws(buf, 256, fi1)) break;
		n = wcslen(buf);
		if (L'\r' == buf[0]) continue;   //空行
		buf[n - 2] = L'\0';
		for (i = 0; i < N; i++)
		{
			p = buf;
			n = wcslen(table[i]);
			while (p = wcsstr(p, table[i]))
			{
				wcsncpy(p, p + n, wcslen(p + n) + 1);
			}
		}
		fwprintf(fo, L"%s\r\n", buf);
	}
	fclose(fi1);
	fclose(fi2);
	fclose(fo);
	return 0;
}
按照这个程序跑了,为什么没什么变化呢?
mengxiaodan 2015-05-12
  • 打赏
  • 举报
回复
引用 17 楼 zhangxiangDavaid 的回复:
奔跑吧,参考:

/*
1.txt存放文章
table.txt是停词表,每行一个停用词
2.txt是修改后的文章
*/
#include <stdio.h>
#include <wchar.h>
FILE *fi1, *fi2, *fo;
wchar_t buf[256];
wchar_t word[30];
wchar_t table[256][30];
wchar_t *p;
int i, n, N;
int main()
{
	if (NULL == (fi1 = fopen("1.txt", "rb")))
	{
		fprintf(stderr, "Can not open file : 1.txt\n");
		return 1;
	}
	if (NULL == (fi2 = fopen("table.txt", "rb")))
	{
		fprintf(stderr, "Can not open file : table.txt\n");
		fclose(fi1);
		return 1;
	}
	if (NULL == (fo = fopen("2.txt", "wb")))
	{
		fprintf(stderr, "Can not open file : 2.txt\n");
		fclose(fi1);
		fclose(fi2);
		return 1;
	}
	//读入停用词表
	N = 0;
	while (1)
	{
		if (NULL == fgetws(buf, 256, fi2)) break;
		n = wcslen(buf);
		if (L'\r' == buf[0]) continue;   //空行
		buf[n - 2] = L'\0';
		wcsncpy(table[N++], buf, n - 1);
	}
	//根据停用词表,删除文件中出现的停用词
	while (1)
	{
		if (NULL == fgetws(buf, 256, fi1)) break;
		n = wcslen(buf);
		if (L'\r' == buf[0]) continue;   //空行
		buf[n - 2] = L'\0';
		for (i = 0; i < N; i++)
		{
			p = buf;
			n = wcslen(table[i]);
			while (p = wcsstr(p, table[i]))
			{
				wcsncpy(p, p + n, wcslen(p + n) + 1);
			}
		}
		fwprintf(fo, L"%s\r\n", buf);
	}
	fclose(fi1);
	fclose(fi2);
	fclose(fo);
	return 0;
}
谢谢啦
苏叔叔 2015-05-09
  • 打赏
  • 举报
回复
奔跑吧,参考:

/*
1.txt存放文章
table.txt是停词表,每行一个停用词
2.txt是修改后的文章
*/
#include <stdio.h>
#include <wchar.h>
FILE *fi1, *fi2, *fo;
wchar_t buf[256];
wchar_t word[30];
wchar_t table[256][30];
wchar_t *p;
int i, n, N;
int main()
{
	if (NULL == (fi1 = fopen("1.txt", "rb")))
	{
		fprintf(stderr, "Can not open file : 1.txt\n");
		return 1;
	}
	if (NULL == (fi2 = fopen("table.txt", "rb")))
	{
		fprintf(stderr, "Can not open file : table.txt\n");
		fclose(fi1);
		return 1;
	}
	if (NULL == (fo = fopen("2.txt", "wb")))
	{
		fprintf(stderr, "Can not open file : 2.txt\n");
		fclose(fi1);
		fclose(fi2);
		return 1;
	}
	//读入停用词表
	N = 0;
	while (1)
	{
		if (NULL == fgetws(buf, 256, fi2)) break;
		n = wcslen(buf);
		if (L'\r' == buf[0]) continue;   //空行
		buf[n - 2] = L'\0';
		wcsncpy(table[N++], buf, n - 1);
	}
	//根据停用词表,删除文件中出现的停用词
	while (1)
	{
		if (NULL == fgetws(buf, 256, fi1)) break;
		n = wcslen(buf);
		if (L'\r' == buf[0]) continue;   //空行
		buf[n - 2] = L'\0';
		for (i = 0; i < N; i++)
		{
			p = buf;
			n = wcslen(table[i]);
			while (p = wcsstr(p, table[i]))
			{
				wcsncpy(p, p + n, wcslen(p + n) + 1);
			}
		}
		fwprintf(fo, L"%s\r\n", buf);
	}
	fclose(fi1);
	fclose(fi2);
	fclose(fo);
	return 0;
}
mengxiaodan 2015-05-09
  • 打赏
  • 举报
回复
引用 15 楼 zhangxiangDavaid 的回复:
[quote=引用 14 楼 mengxiaodan 的回复:] [quote=引用 13 楼 zhangxiangDavaid 的回复:] 1.txt (unicode存储)

aaaaaaxxaaaaxaaaaaa
bbbb啦啦bbbbbb啦bbbbbb
2.txt

aaaaaabeautyaaaaxaaa
bbbb我爱你bbbbbb啦bbbb,
是有一个文件存放要改的文章,一个文件存放停用表,然后和停用表里的词比较,一样的就删掉,最后把结果存放在一个文件中[/quote] 你可以先把停用表中的内容读出来,再一行一行匹配。框架已搭好,就是上面的程序 [/quote]可以给段程序参考吗?
苏叔叔 2015-05-09
  • 打赏
  • 举报
回复
引用 14 楼 mengxiaodan 的回复:
[quote=引用 13 楼 zhangxiangDavaid 的回复:] 1.txt (unicode存储)

aaaaaaxxaaaaxaaaaaa
bbbb啦啦bbbbbb啦bbbbbb
2.txt

aaaaaabeautyaaaaxaaa
bbbb我爱你bbbbbb啦bbbb,
是有一个文件存放要改的文章,一个文件存放停用表,然后和停用表里的词比较,一样的就删掉,最后把结果存放在一个文件中[/quote] 你可以先把停用表中的内容读出来,再一行一行匹配。框架已搭好,就是上面的程序
mengxiaodan 2015-05-09
  • 打赏
  • 举报
回复
引用 13 楼 zhangxiangDavaid 的回复:
1.txt (unicode存储)

aaaaaaxxaaaaxaaaaaa
bbbb啦啦bbbbbb啦bbbbbb
2.txt

aaaaaabeautyaaaaxaaa
bbbb我爱你bbbbbb啦bbbb,
是有一个文件存放要改的文章,一个文件存放停用表,然后和停用表里的词比较,一样的就删掉,最后把结果存放在一个文件中
苏叔叔 2015-05-08
  • 打赏
  • 举报
回复
1.txt (unicode存储)

aaaaaaxxaaaaxaaaaaa
bbbb啦啦bbbbbb啦bbbbbb
2.txt

aaaaaabeautyaaaaxaaa
bbbb我爱你bbbbbb啦bbbb
苏叔叔 2015-05-08
  • 打赏
  • 举报
回复
引用 11 楼 mengxiaodan 的回复:
[quote=引用 10 楼 zhao4zhong1 的回复:] fopen fgets fclose fopen fgets str_replace fputs fclose
可以给个参考程序吗?因为老师急着要[/quote] 这样可好:

/*
将"xx"替换为"beauty"
将"啦啦"替换为"我爱你"
*/
#include <stdio.h>
#include <wchar.h>
FILE *fi, *fo;
wchar_t buf[256];
wchar_t *p;
int n;
int main()
{
	if (NULL == (fi = fopen("1.txt", "rb")))
	{
		fprintf(stderr, "Can not open file : 1.txt\n");
		return 1;
	}
	if (NULL == (fo = fopen("2.txt", "wb")))
	{
		fprintf(stderr, "Can not open file : 2.txt\n");
		fclose(fi);
		return 1;
	}
	while (1)
	{
		if (NULL == fgetws(buf, 256, fi)) break;
		n = wcslen(buf);

		buf[n - 1] = L'\0';
		p = buf;
		while (p = wcsstr(p, L"xx"))
		{
			memmove(p + 6, p + 2, wcslen(p) + 1);
			wcsncpy(p, L"beauty", 6);
			p += 6;
		}
		p = buf;

		while (p = wcsstr(p, L"啦啦"))
		{

			memmove(p + 3, p + 2, wcslen(p) + 1);
			wcsncpy(p, L"我爱你", 3);

			p += 3;
		}
		fwprintf(fo, L"%s\r\n", buf);
	}
	fclose(fi);
	fclose(fo);
	return 0;
}
mengxiaodan 2015-05-08
  • 打赏
  • 举报
回复
引用 10 楼 zhao4zhong1 的回复:
fopen fgets fclose fopen fgets str_replace fputs fclose
可以给个参考程序吗?因为老师急着要
老王爱上猫 2015-05-07
  • 打赏
  • 举报
回复
分词前就把停用词剔除,会导致分词不准吧。如果实在要删除,就根据停用词表直接把字符串中的停用词删掉
mengxiaodan 2015-05-07
  • 打赏
  • 举报
回复
是分词前
引用 楼主 mengxiaodan 的回复:
请问ICTCLAS在粉刺钱怎么去除停用词
是分词前
赵4老师 2015-05-07
  • 打赏
  • 举报
回复
fopen fgets fclose fopen fgets str_replace fputs fclose
赵4老师 2015-05-07
  • 打赏
  • 举报
回复
引用 8 楼 mengxiaodan 的回复:
引用 6 楼 zhao4zhong1 的回复:
在我眼里,一篇文章和一个字符串没有区别。
就是有一个哈工大停用词表,老师让我先导入那个,再去掉一篇文章的停用词
你不会对照我上面的程序, 先将文件中的停用词表读到一个字符串数组中, 在将待处理文件的内容读到一个字符串中, 用一个循环替换这个字符串中的所有停用词, 将处理后的字符串保存到结果文件中 吗?
mengxiaodan 2015-05-07
  • 打赏
  • 举报
回复
引用 6 楼 zhao4zhong1 的回复:
在我眼里,一篇文章和一个字符串没有区别。
就是有一个哈工大停用词表,老师让我先导入那个,再去掉一篇文章的停用词
mengxiaodan 2015-05-07
  • 打赏
  • 举报
回复
引用 6 楼 zhao4zhong1 的回复:
在我眼里,一篇文章和一个字符串没有区别。
可是我一个新手有区别
赵4老师 2015-05-07
  • 打赏
  • 举报
回复
在我眼里,一篇文章和一个字符串没有区别。
mengxiaodan 2015-05-07
  • 打赏
  • 举报
回复
引用 2 楼 bjym1987 的回复:
分词前就把停用词剔除,会导致分词不准吧。如果实在要删除,就根据停用词表直接把字符串中的停用词删掉
想要把一篇文章的停用词去掉
mengxiaodan 2015-05-07
  • 打赏
  • 举报
回复
引用 3 楼 zhao4zhong1 的回复:
仅供参考:
#include <stdio.h>
#include <string.h>
char s[256];
char *p;
int r,n,i;
int main() {
    while (1) {
        printf("请输入一行文字(空行结束),\"%%20\"将替换为\" \",\"你懂得\"将替换为\"XXXXXX\":\n");
        fgets(s,256,stdin);
        if ('\n'==s[0]) break;
        p=s;
        while (1) {
            p=strstr(p,"%20");
            if (p) {
                memmove(p+1,p+3,strlen(p)-3+1);
                p[0]=' ';
            } else break;
        }
        p=s;
        while (1) {
            p=strstr(p,"你懂得");
            if (p) {
                memmove(p+6,p+6,strlen(p)-6+1);
                for (i=0;i<6;i++) p[i]='X';
            } else break;
        }
        printf("%s",s);
    }
    return 0;
}
//请输入一行文字(空行结束),"%20"将替换为" ","你懂得"将替换为"XXXXXX":
//abcdefg%20helloworld%20something.pdf
//abcdefg helloworld something.pdf
//请输入一行文字(空行结束),"%20"将替换为" ","你懂得"将替换为"XXXXXX":
//这是测试文字你懂得,在这个你懂的地方,就得做你懂得的事
//这是测试文字XXXXX,在这个你懂的地方,就得做XXXXX的事
//请输入一行文字(空行结束),"%20"将替换为" ","你懂得"将替换为"XXXXXX":
//


我是想把一篇文章的停用词去掉
加载更多回复(1)

64,654

社区成员

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

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