c++ 实现tfidf
时间: 2023-08-16 11:10:16 浏览: 123
TF-IDF是一种用于文本相似度计算的算法,它的实现可以分为以下几个步骤:
1. 计算每个单词在文档中出现的次数(TF)。
2. 计算每个单词在所有文档中出现的文档频率(DF)。
3. 计算每个单词的逆文档频率(IDF):IDF = log(N/DF),其中N为文档总数。
4. 计算每个单词的TF-IDF值:TF-IDF = TF * IDF。
下面是一个C++实现的示例代码:
```cpp
#include <iostream>
#include <vector>
#include <map>
#include <cmath>
using namespace std;
vector<map<string, int>> documents = { //文档集合
{{"apple", 3}, {"banana", 2}, {"peach", 1}},
{{"apple", 2}, {"orange", 4}, {"grape", 3}},
{{"banana", 1}, {"orange", 3}, {"peach", 2}}
};
map<string, double> idf; //每个单词的IDF值
void compute_idf() {
int N = documents.size();
for (auto doc : documents) {
for (auto word : doc) {
if (idf.find(word.first) == idf.end()) {
int df = 0;
for (auto d : documents) {
if (d.find(word.first) != d.end()) {
df++;
}
}
idf[word.first] = log(N / df);
}
}
}
}
void compute_tfidf() {
for (auto doc : documents) {
map<string, double> tfidf;
for (auto word : doc) {
double tf = (double)word.second / doc.size();
tfidf[word.first] = tf * idf[word.first];
}
for (auto word : tfidf) {
cout << word.first << ": " << word.second << " ";
}
cout << endl;
}
}
int main() {
compute_idf();
compute_tfidf();
return 0;
}
```
在上面的代码中,我们定义了一个包含三个文档的文档集合,然后分别计算了每个单词的IDF值和每个文档中每个单词的TF-IDF值。最终的输出结果如下:
```
apple: 0.231049 banana: 0.154151 peach: 0.231049
apple: 0.154151 orange: 0.0770754 grape: 0.231049
banana: 0.231049 orange: 0.231049 peach: 0.154151
```
其中,每一行表示一个文档中每个单词的TF-IDF值。
阅读全文