@@ -169,6 +169,8 @@ const pair <size_t, const anyks::Dumper::awrd_t *> anyks::Dumper::best() const n
169169 if (it != this ->sequence .end ()){
170170 // Сбрасываем буфер
171171 var1 = {};
172+ // Сбрасываем второй рейтинг
173+ var2.buffer .reset ();
172174 // Получаем последовательность
173175 seq = const_cast <vector <size_t > *> (&it->second );
174176 // Получаем количество слов в списке
@@ -192,12 +194,17 @@ const pair <size_t, const anyks::Dumper::awrd_t *> anyks::Dumper::best() const n
192194 // Если вес слов больше предыдущего
193195 if (item.second .wltf >= var2.wltf ){
194196 // Снимаем рейтинг предыдущего варианта
195- if (item.second .wltf > var2.wltf ) var2.buffer .reset (0 );
196- // Запоминаем вес слов
197- var1.wltf = item.second .wltf ;
197+ if (item.second .wltf > var2.wltf )
198+ // Устанавливаем рейтинг текущего варианта
199+ var2.buffer .reset (0 );
200+ // Устанавливаем также рейтинг предыдущего варианта
201+ else var2.buffer .set (0 );
198202 // Устанавливаем значение рейтинга
199203 var1.buffer .set (0 );
200- }
204+ // Запоминаем вес слов
205+ var1.wltf = item.second .wltf ;
206+ // Устанавливаем рейтинг предыдущего варианта
207+ } else var2.buffer .set (0 );
201208 // Учитываем коэффициенты, только если они переданы переданы
202209 if ((item.second .lev != 0 ) && (item.second .tmo != 0.0 )){
203210 // Если значение Танимото больше предыдущего
@@ -208,12 +215,19 @@ const pair <size_t, const anyks::Dumper::awrd_t *> anyks::Dumper::best() const n
208215 var2.buffer .reset (1 );
209216 // Запоминаем вес слов
210217 var1.wltf = item.second .wltf ;
218+ // Запоминаем предыдущее значение рейтинга слова
219+ } else {
220+ // Устанавливаем также рейтинг предыдущего варианта
221+ var2.buffer .set (1 );
222+ // Запоминаем предыдущее значение рейтинга слова
223+ var1.wltf = var2.wltf ;
211224 }
212225 // Устанавливаем значение рейтинга
213226 var1.buffer .set (1 );
214227 // Запоминаем значение Танимото
215228 var1.tmo = item.second .tmo ;
216- }
229+ // Устанавливаем рейтинг предыдущего варианта
230+ } else var2.buffer .set (1 );
217231 }
218232 // Если - это одиночное слово
219233 } else {
@@ -222,12 +236,17 @@ const pair <size_t, const anyks::Dumper::awrd_t *> anyks::Dumper::best() const n
222236 // Если значение Танимото больше предыдущего
223237 if (item.second .tmo >= var2.tmo ){
224238 // Снимаем рейтинг предыдущего варианта
225- if (item.second .tmo > var2.tmo ) var2.buffer .reset (0 );
239+ if (item.second .tmo > var2.tmo )
240+ // Устанавливаем рейтинг текущего варианта
241+ var2.buffer .reset (0 );
242+ // Устанавливаем также рейтинг предыдущего варианта
243+ else var2.buffer .set (0 );
226244 // Устанавливаем значение рейтинга
227245 var1.buffer .set (0 );
228246 // Запоминаем значение Танимото
229247 var1.tmo = item.second .tmo ;
230- }
248+ // Устанавливаем рейтинг предыдущего варианта
249+ } else var2.buffer .set (0 );
231250 }
232251 // Если вес слов больше предыдущего
233252 if (item.second .wltf >= var2.wltf ){
@@ -237,12 +256,19 @@ const pair <size_t, const anyks::Dumper::awrd_t *> anyks::Dumper::best() const n
237256 var2.buffer .reset (1 );
238257 // Запоминаем значение Танимото
239258 var1.tmo = item.second .tmo ;
259+ // Запоминаем предыдущее значение Танимото
260+ } else {
261+ // Устанавливаем также рейтинг предыдущего варианта
262+ var2.buffer .set (1 );
263+ // Устанавливаем предыдущее значение Танимота
264+ var1.tmo = var2.tmo ;
240265 }
241266 // Устанавливаем значение рейтинга
242267 var1.buffer .set (1 );
243268 // Запоминаем вес слов
244269 var1.wltf = item.second .wltf ;
245- }
270+ // Устанавливаем рейтинг предыдущего варианта
271+ } else var2.buffer .set (1 );
246272 }
247273 // Учитываем коэффициенты, только если они переданы переданы
248274 if ((item.second .lev != 0 ) && (item.second .tmo != 0.0 )){
@@ -256,12 +282,21 @@ const pair <size_t, const anyks::Dumper::awrd_t *> anyks::Dumper::best() const n
256282 var1.tmo = item.second .tmo ;
257283 // Запоминаем вес слов
258284 var1.wltf = item.second .wltf ;
285+ // Если расстояние Левенштейна такое-же
286+ } else {
287+ // Устанавливаем также рейтинг предыдущего варианта
288+ var2.buffer .set (2 );
289+ // Запоминаем предыдущее значение Танимото
290+ var1.tmo = var2.tmo ;
291+ // Запоминаем предыдущий рейтинг слова
292+ var1.wltf = var2.wltf ;
259293 }
260294 // Устанавливаем значение рейтинга
261295 var1.buffer .set (2 );
262296 // Запоминаем дистанцию Левенштейна
263297 var1.lev = item.second .lev ;
264- }
298+ // Устанавливаем рейтинг предыдущего варианта
299+ } else var2.buffer .set (2 );
265300 }
266301 // Если последовательность существует
267302 if (exist && !onewrd){
@@ -311,10 +346,12 @@ const pair <size_t, const anyks::Dumper::awrd_t *> anyks::Dumper::best() const n
311346 logprob = var2.logprob ;
312347 // Запоминаем частоту последовательности
313348 var1.logprob = ppl.logprob ;
314- }
349+ // Устанавливаем также рейтинг предыдущего варианта
350+ } else var2.buffer .set (3 );
315351 // Устанавливаем значение рейтинга
316352 var1.buffer .set (3 );
317- }
353+ // Устанавливаем рейтинг предыдущего варианта
354+ } else var2.buffer .set (3 );
318355 // Если частоты, псевдо-одинаковые, выполняем коррекцию
319356 if (((max (var1.logprob , logprob) - min (var1.logprob , logprob)) < 0.09 ) && mode1 && mode2){
320357 // Запоминаем значение второго буфера
0 commit comments