我想从文章中计算词频。
我的想法是先创建一个struct array
struct{
char[WORD_SIZE]
}data[MAX_WORD_NUMBER];
然后读取每个字符,然后通过
确定isalpha();
然后按
转换为小写tolower();
然后在每个结构中存储一个单词。
然后为每个单词制作失败函数,
然后通过调用它来测试每个单词。
1.但我不知道如何计算重复导致的频率。
(我想我每次阅读和插入一个单词时都可以比较它,但它是如此无效,是否有更有效的方法?)
2.我认为我的方法调用功能太多了。
如何更有效地使用KMP?
答案 0 :(得分:3)
您使用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编程,那么这一切都无济于事。
答案 1 :(得分:1)
如果您打算在C中执行此操作,请扩展您的结构:
struct {
char[WORD_SIZE];
int count;
} data[MAX_WORD_NUMBER];
然后,只要在此结构数组中存储新单词,也会将相应的count
设置为0。
然后,如果您发现某个单词已经在数组中,请增加相应的count
。
在程序结束时打印计数。