44 uint64_t& char_counter)
46 std::vector<std::unordered_map<uint64_t, uint64_t>> temp_dicts;
53 dicts.resize(temp_dicts.size());
54 for (
size_t i = 0; i < temp_dicts.size(); i++)
58 dicts[i] = std::make_shared<UInt64Dict>(
m_unk,
59 temp_dicts[i].begin(), temp_dicts[i].end(),
60 [char_counter, min_ipm](uint64_t c){
61 return ipm(c, char_counter) > min_ipm;
66 dicts[i] = std::make_shared<UInt64Dict>(temp_dicts[i].begin(), temp_dicts[i].end());
76 void process(
const std::wstring& text, uint32_t min_ipm)
78 std::vector<std::unordered_map<uint64_t, uint64_t>> temp_dicts;
81 std::unordered_map<uint64_t, uint64_t> char_dict;
82 for (
size_t i = 0; i < text.size(); i++)
84 uint64_t v = (uint64_t)(text[i]);
85 auto it = char_dict.find(v);
86 if (char_dict.end() == it)
96 uint64_t total = text.size();
98 dicts.resize(temp_dicts.size());
99 dicts[0] = std::make_shared<UInt64Dict>(
m_unk, char_dict,
100 [total, min_ipm](uint64_t c){
101 return ipm(c, total) > min_ipm;
115 uint64_t& char_counter,
116 std::vector<std::unordered_map<uint64_t, uint64_t>>& temp_dicts)
123 m_input_encoder.warmup((
const uint8_t*)text.data(), &pos, text.size());
126 while (
size_t(pos) < text.size())
128 if (
m_input_encoder.parse((
const uint8_t*)text.data(), &pos, text.size()) > 0)
134 char final_spaces[] =
" ";
144 throw std::runtime_error(
"Something wrong.");