Ті самі слова у більш зручному для "парсингу" вигляді і стиснені в zip 11.9MB:
https://drive.google.com/file/d/127WaTG … drive_link
Ніяк не можу створити чіткі правила за якими воно буде витягатися з html в struct. Більшість просто, тобто <tr></tr>, <td></td> але є дані і у <a></a> і не завжди, треба ділити файл на однакові за правилами написання підфайли, поки що поділив тільки за кількістю тегів <tr></tr> кодом
#include <iostream>
#include <string>
#include <fstream>
using namespace std;
struct ss
{
    size_t pos;
    string sstr;
};
ss sub(string str, string beg, string end, size_t pos)
{
    ss ret;
    size_t pos1=str.find(beg, pos);
    if(pos1!=std::string::npos)
    {
        size_t pos2=str.find(end, pos1);
        if(pos2!=std::string::npos)
        {
            ret.sstr=str.substr(pos1, pos2-pos1+end.size());
            
        }
        ret.pos=pos2;
        return ret;
    }
    ret.pos = pos1;
    return ret;
}
string LoadFile(string FilePath) {
  ifstream infile(FilePath.c_str());
  if (!infile.is_open()) {
    cerr << "File\"" << FilePath << "\" not found." << endl;
    return "";
  }
  string content;
  string line;
  while (getline(infile, line)) {
    content += line + "\n";
  }
  infile.close();
  return content;
}
int main()
{
    string fromtable="<table>";
    string totable="</table>";
    string fromtr="<tr>";
    string totr="</tr>";
    ss op1, op2;
    op1.pos=0;
    op2.pos=0;
    cout << "Input File: ";
    string input_file_name;
    cin >> input_file_name;
    cout << "Output file name: ";
    string output_file_name;
    cin >> output_file_name;
    
    ofstream outfile(output_file_name.c_str());
    string str=LoadFile(input_file_name);
    int icount=0;
    while(op1.pos!=std::string::npos)
    {
        icount=0;
        op2.pos=0;
        op1=sub(str, fromtable, totable, op1.pos);
        cout << op1.pos << " from " << str.size() << endl;
        if(op1.pos!=std::string::npos) 
        {
            while(op2.pos!=std::string::npos)
            {
                op2=sub(op1.sstr, fromtr, totr, op2.pos);
                if(op2.pos!=std::string::npos) icount++;
            }
            if(icount==7) outfile << op1.sstr << endl;//7 замінити на кількість tr
        }
    }
    
    
    return 0;
}
Я міняв о́, а́, и́ і подібні на о,а,и (звичайні) і десь помилково замінив а́ на "и" чи щось таке, мені для експерименту цього поки досить, а вам треба буде самим розбивати файли з попереднього поста, заміняти букви і видаляти цифри, символи і посилання для скорочення обсягу