中文文档如何去掉停用词

C语言 码拜 10年前 (2015-05-11) 2189次浏览 0个评论

已经进行过分词,却卡在去掉停用词上…哪位大神有c代码或者方法,希望能指教。万分感谢!
我只是搜到曾经有人说去停用词方法可以采用:

1.我们要有一个停用词表,可以网上下一个
2.把停用词表读入一个字符串数组string stop[100];
3.把要处理的字符串,以单个字符的形式读到一个char*指向的空间里,当读到不是字母的就停止,这样这个char*指向的空间里就存下了一个单词
4.把这个char *指针赋给一个string str变量,让这个str与每一个stop[i]比较。
5.如果不是停用词就把这个单词追加到另一个字符串string str1里,
6.如果是停用词就不管它了
7.把刚才读到的字符追加到str1里
……
……
奈何自己编码能力太次,望求教!

18分
一个简易的例子:

int main(void)
{
	int i, n;
	FILE *fstop, *fs, *fd;
	if (NULL == (fstop = fopen("stop.txt", "r"))) return 1;
	if (NULL == (fs = fopen("src.txt", "r"))) return 1;
	if (NULL == (fd = fopen("des.txt", "w"))) return 1;
	char stop[100][30];   //100个停用词,够吗?
	char buf[256];        //一行255个字符,够吗?
	//读入停词表
	n = 0;
	while (1)
	{
		if (NULL == fgets(buf, 256, fstop)) break;
		if (""\n"" == buf[0]) continue;   //空行
		buf[strlen(buf) - 1] = 0;       //去掉""\n""
		strcpy(stop[n++], buf);
	}
	fclose(fstop);
	while (1)
	{
		if (NULL == fgets(buf, 256, fs)) break;
		if (""\n"" == buf[0]) continue;   //空行
		buf[strlen(buf) - 1] = 0;       //去掉""\n""
		for (i = 0; i < n; i++)
		{
			char *p = buf;
			int len = strlen(stop[i]);
			while (p = strstr(p, stop[i]))
			{
				memmove(p, p + len, strlen(p + len) + 1);
			}
		}
		fprintf(fd, "%s\n", buf);
	}
	fclose(fs);
	fclose(fd);
	return 0;
}
我想问一下楼上,src是要去停用词的文件么?des是去停用词后存储的文件么?

还想知道一下……为什么显示结果有误…请大神指教
中文文档如何去掉停用词

引用 2 楼 shaqkoko54 的回复:

我想问一下楼上,src是要去停用词的文件么?des是去停用词后存储的文件么?

还想知道一下……为什么显示结果有误…请大神指教
中文文档如何去掉停用词

你的src和des的理解是正确的,
加上头文件
#incldue<stdio.h>
#include<string.h>

大神大神……txt 的地址我也更改为相对应的地址了,试验之后无错误……但是……为什么编译之后显示停止工作,求指教
中文文档如何去掉停用词
我都已经验证过,你自己找下错误
2分
崩溃的时候在弹出的对话框按相应按钮进入调试,按Alt+7键查看Call Stack即“调用堆栈”里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处,看不懂时双击下一行,直到能看懂为止。

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明中文文档如何去掉停用词
喜欢 (0)
[1034331897@qq.com]
分享 (0)

文章评论已关闭!