使用C++对一段语料进行词频统计,计算出词频最高的10个词
时间: 2024-12-14 20:18:02 浏览: 8
在C++中进行词频统计并找出最高频的10个词,通常会涉及以下几个步骤:
1. **数据预处理**:
- 将文本拆分为单词,可以使用`std::string::find_first_of`、`std::isspace`等函数去除标点符号和换行符,并将文本转换为小写,以便不区分大小写。
```cpp
#include <string>
#include <algorithm>
std::string process_text(const std::string& text) {
std::string processed;
for (char c : text) {
if (!std::ispunct(c)) { // 如果不是标点符号
processed += std::tolower(c); // 转化为小写并添加到新字符串
}
}
return processed;
}
```
2. **创建关联容器**:
- 使用`std::map`或`std::unordered_map`存储每个单词及其对应的频率,因为它们支持O(1)时间复杂度查找和插入。
```cpp
using WordFrequency = std::pair<std::string, int>;
std::map<std::string, int> word_freq;
```
3. **遍历并计数**:
- 遍历处理后的单词,每遇到新的单词就增加其计数,如果已经存在,则更新计数。
```cpp
void count_words(const std::string& text) {
auto words = split(process_text(text));
for (const auto& word : words) {
word_freq[word]++;
}
}
```
4. **获取高频词**:
- 可以使用`std::partial_sort`先排序词频,然后取前十个最高频词。
```cpp
void top_ten() {
std::vector<WordFrequency> sorted_freq(word_freq.begin(), word_freq.end());
std::sort(sorted_freq.begin(), sorted_freq.end(),
[](const WordFrequency& a, const WordFrequency& b) -> bool {
return a.second > b.second;
});
for (size_t i = 0; i < 10 && i < sorted_freq.size(); ++i) {
std::cout << sorted_freq[i].first << ": " << sorted_freq[i].second << std::endl;
}
}
```
5. **完整示例**:
```cpp
#include <iostream>
#include <string>
#include <algorithm>
#include <vector>
...
void main() {
std::string text = ...; // 你的文本内容
count_words(text);
top_ten();
}
```
阅读全文