我想统计一篇文章的词频。
我的想法是先创建一个struct数组
struct{
char[WORD_SIZE]
}data[MAX_WORD_NUMBER];
然后读取每个字符然后确定
isalpha();
然后通过
转换为小写tolower();
然后为每个结构存储一个单词。
然后为每个词做失败函数,
然后通过调用来测试每个单词。
1.但是由于重复导致不知道怎么统计频率
(本以为每次读入一个词的时候都可以对比一下,结果实在是太没效果了,请问有没有更高效的方法?)
2.我觉得我的方法调用函数太多了。
如何更有效地使用 KMP?
最佳答案
您使用 C 还是 C++ 编程?你用两者标记了你的问题。
假设您使用的是 C++,那么您将更好地使用 std::map
来计算您的字数。像这样
#include <map>
#include <string>
std::map<std::string, int> data;
std::string word;
data[word] = 0; // set word count to zero
data[word]++; // increment word count
// print out all the word counts
for (std::map<std::string, int>::iterator i = data.begin();
i != data.end(); ++i)
{
cout << "word " << i->first << " occurs " << i->second << "times\n";
}
如果您为工作选择合适的工具,这项任务将如此容易得多。当然,如果您使用 C 语言编程,那么这些都无济于事。
关于c++ - 有效地使用带数组的 KMP 来计算词频计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12987682/