0

我想计算一篇文章的词频。

我的想法是首先创建一个结构数组

 struct{
       char[WORD_SIZE]
 }data[MAX_WORD_NUMBER];

然后读取每个字符然后确定

isalpha();

然后通过转换为小写

tolower();

然后将一个单词存储到每个结构中。

然后为每个单词制作失败函数,

然后通过调用它来测试每个单词。

1.但我不知道如何计算由于重复引起的频率。

(我以为每次读插入词都可以比较一下,但是效果太差了,有没有更高效的方法?)

2.我认为我的方法调用函数的时间太多了。

如何更有效地使用 KMP?

4

2 回答 2

3

您正在使用 C 或 C++ 编程?你用两者都标记了你的问题。

std::map假设您使用的是 C++,那么您将在数词方面做得更好。像这样的东西

#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 进行编程,那么这些都无济于事。

于 2012-10-20T11:04:15.500 回答
1

如果您打算在 C 中执行此操作,请像这样扩展您的结构:

struct {
    char[WORD_SIZE];
    int count;
} data[MAX_WORD_NUMBER];

然后每当你在这个结构数组中存储一个新单词时,也将相应的设置count为 0。

然后,如果您发现一个单词已经在数组中,请增加相应的count.

在程序结束时打印计数。

于 2012-10-20T11:17:17.723 回答