Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <vector>
- #include <iostream>
- #include <string>
- #include <cmath>
- #include <map>
- #include <algorithm>
- using namespace std;
- template <typename Documents,typename Term>
- vector<double> ComputeTfIdfs(const Documents& documents, const Term& query){
- vector<double> result; // 1. создаю массив
- int temp = 0;
- double tf;
- double idf;
- for (const auto& document : documents) { // 2. прохожу циклом, считаю ТФ и document_freq
- int document_freq = count(document.begin(), document.end(), query);
- if (document_freq != 0) {
- tf = static_cast<double>(document_freq) / static_cast<double>(document.size());
- result.push_back(tf);
- ++temp;
- } else {
- result.push_back(0);
- }
- }
- idf = log(static_cast<double>(documents.size()) / static_cast<double>(temp)); // 3. считаю ИДФ
- for (double& tf : result) { // 4. обновляю массив
- tf *= idf;
- }
- return result;
- }
- int main() {
- const vector<vector<string>> documents = {
- {"белый"s, "кот"s, "и"s, "модный"s, "ошейник"s},
- {"пушистый"s, "кот"s, "пушистый"s, "хвост"s},
- {"ухоженный"s, "пёс"s, "выразительные"s, "глаза"s},
- };
- const auto& tf_idfs = ComputeTfIdfs(documents, "кот"s);
- for (const double tf_idf : tf_idfs) {
- cout << tf_idf << " "s;
- }
- cout << endl;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement