用C++写一个程序实例,去除例子txt文件中的中文或英文的停用词
时间: 2024-05-06 13:20:03 浏览: 75
由于没有提供停用词表,本程序只演示如何读入文本文件并去除其中的中文或英文停用词。
```c
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#define MAX_WORD_LEN 50
#define MAX_STOPWORDS 1000
char stopwords[MAX_STOPWORDS][MAX_WORD_LEN]; // 存储停用词
int num_stopwords = 0; // 停用词数量
// 读入停用词表
void read_stopwords(const char* filename) {
FILE* fp = fopen(filename, "r");
if (fp == NULL) {
printf("Failed to open stopwords file.\n");
return;
}
char word[MAX_WORD_LEN];
while (fscanf(fp, "%s", word) == 1) {
strcpy(stopwords[num_stopwords++], word);
}
fclose(fp);
}
// 判断一个单词是否是停用词
int is_stopword(char* word) {
for (int i = 0; i < num_stopwords; i++) {
if (strcmp(word, stopwords[i]) == 0) {
return 1;
}
}
return 0;
}
// 去除字符串中的标点符号
void remove_punct(char* str) {
int len = strlen(str);
for (int i = 0; i < len; i++) {
if (ispunct(str[i])) {
for (int j = i; j < len; j++) {
str[j] = str[j+1];
}
len--;
i--;
}
}
}
int main() {
read_stopwords("stopwords.txt");
FILE* fp = fopen("example.txt", "r");
if (fp == NULL) {
printf("Failed to open example file.\n");
return 1;
}
char word[MAX_WORD_LEN];
while (fscanf(fp, "%s", word) == 1) {
// 去除标点符号
remove_punct(word);
// 转换为小写字母
for (int i = 0; i < strlen(word); i++) {
word[i] = tolower(word[i]);
}
// 判断是否为停用词
if (!is_stopword(word)) {
printf("%s ", word);
}
}
fclose(fp);
return 0;
}
```
注意:本程序假设输入的文本文件是纯文本文件,其中的单词以空格分隔,并且标点符号只包括 ASCII 码表中的字符。如果输入文件中存在其他语言的字符或者特殊字符,本程序可能无法正确处理。
阅读全文