shizaero

Шаблоны

Jan 11th, 2023
121
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.26 KB | None | 0 0
  1. // tf_06.cpp
  2.  
  3. #include <algorithm>
  4. #include <cmath>
  5. #include <iostream>
  6. #include <vector>
  7.  
  8. using namespace std;
  9.  
  10. /* MATCHER: SuccessMatcher */
  11.  
  12. template <typename Documents, typename Term>
  13. vector<double> ComputeTfIdfs(const Documents& documents, const Term& term) {
  14.     vector<double> tf_idfs;
  15.  
  16.     int document_freq = 0;
  17.     for (const auto& document : documents) {
  18.         const int freq = count(document.begin(), document.end(), term);
  19.         if (freq > 0) {
  20.             ++document_freq;
  21.         }
  22.         tf_idfs.push_back(static_cast<double>(freq) / document.size());
  23.     }
  24.  
  25.     const double idf = log(static_cast<double>(documents.size()) / document_freq);
  26.     for (double& tf_idf : tf_idfs) {
  27.         tf_idf *= idf;
  28.     }
  29.  
  30.     return tf_idfs;
  31. }
  32.  
  33. int main() {
  34.     const vector<vector<string>> documents = {
  35.         {"белый"s, "кот"s, "и"s, "модный"s, "ошейник"s},
  36.         {"пушистый"s, "кот"s, "пушистый"s, "хвост"s},
  37.         {"ухоженный"s, "пёс"s, "выразительные"s, "глаза"s},
  38.     };
  39.     const auto& tf_idfs = ComputeTfIdfs(documents, "кот"s);
  40.     for (const double tf_idf : tf_idfs) {
  41.         cout << tf_idf << " "s;
  42.     }
  43.     cout << endl;
  44.     return 0;
  45. }
Add Comment
Please, Sign In to add comment