C语言tire树词频统计并删除非停用词
时间: 2023-12-25 18:04:44 浏览: 143
在上一个回答中,我介绍了如何使用Trie树进行词频统计。在删除非停用词的过程中,我们可以在插入单词的时候进行判断,如果该单词不是停用词,则进行插入操作,否则不进行操作。
以下是修改后的代码:
1. 定义停用词列表,并读取停用词文件。
```
#define MAX_STOPWORDS 1000
#define MAX_STOPWORD_LENGTH 50
char stopWords[MAX_STOPWORDS][MAX_STOPWORD_LENGTH];
int numStopWords = 0;
void loadStopWords(char* fileName) {
FILE* fp = fopen(fileName, "r");
if (fp == NULL) {
printf("Failed to open file: %s\n", fileName);
return;
}
char line[MAX_LINE_LENGTH];
while (fgets(line, MAX_LINE_LENGTH, fp) != NULL) {
char* word = strtok(line, " \n\t\r");
while (word != NULL) {
strcpy(stopWords[numStopWords], word);
numStopWords++;
word = strtok(NULL, " \n\t\r");
}
}
fclose(fp);
}
```
2. 修改插入单词的代码,加入停用词判断。
```
void insertWord(char* word) {
struct TrieNode* node = root;
for (int i = 0; word[i] != '\0'; i++) {
int index = word[i] - 'a';
if (node->children[index] == NULL) {
node->children[index] = createNode();
}
node = node->children[index];
}
node->isEndOfWord = true;
for (int i = 0; i < numStopWords; i++) {
if (strcmp(word, stopWords[i]) == 0) {
return;
}
}
node->frequency++;
}
```
3. 读取文本文件,并进行词频统计和删除停用词。
```
void countWordsFromFile(char* fileName) {
FILE* fp = fopen(fileName, "r");
if (fp == NULL) {
printf("Failed to open file: %s\n", fileName);
return;
}
char line[MAX_LINE_LENGTH];
while (fgets(line, MAX_LINE_LENGTH, fp) != NULL) {
char* word = strtok(line, " \n\t\r");
while (word != NULL) {
insertWord(word);
word = strtok(NULL, " \n\t\r");
}
}
fclose(fp);
}
```
使用以上代码,即可对文本文件中的单词进行词频统计并删除停用词。
阅读全文