Поправки по результату тестирования, оптимизации

This commit is contained in:
Book Pauk
2020-12-24 18:32:57 +07:00
parent d449478204
commit aad74cf682

View File

@@ -30,6 +30,15 @@ const defaultSettings = {
}, },
}; };
//for splitToSlogi()
const glas = new Set(['а', 'А', 'о', 'О', 'и', 'И', 'е', 'Е', 'ё', 'Ё', 'э', 'Э', 'ы', 'Ы', 'у', 'У', 'ю', 'Ю', 'я', 'Я']);
const soglas = new Set([
'б', 'в', 'г', 'д', 'ж', 'з', 'й', 'к', 'л', 'м', 'н', 'п', 'р', 'с', 'т', 'ф', 'х', 'ц', 'ч', 'ш', 'щ',
'Б', 'В', 'Г', 'Д', 'Ж', 'З', 'Й', 'К', 'Л', 'М', 'Н', 'П', 'Р', 'С', 'Т', 'Ф', 'Х', 'Ч', 'Ц', 'Ш', 'Щ'
]);
const znak = new Set(['ь', 'Ь', 'ъ', 'Ъ', 'й', 'Й']);
const alpha = new Set([...glas, ...soglas, ...znak]);
export default class BookParser { export default class BookParser {
constructor(settings = {}) { constructor(settings = {}) {
this.sets = {}; this.sets = {};
@@ -704,48 +713,44 @@ export default class BookParser {
splitToSlogi(word) { splitToSlogi(word) {
let result = []; let result = [];
const glas = new Set(['а', 'А', 'о', 'О', 'и', 'И', 'е', 'Е', 'ё', 'Ё', 'э', 'Э', 'ы', 'Ы', 'у', 'У', 'ю', 'Ю', 'я', 'Я']);
const soglas = new Set([
'б', 'в', 'г', 'д', 'ж', 'з', 'й', 'к', 'л', 'м', 'н', 'п', 'р', 'с', 'т', 'ф', 'х', 'ц', 'ч', 'ш', 'щ',
'Б', 'В', 'Г', 'Д', 'Ж', 'З', 'Й', 'К', 'Л', 'М', 'Н', 'П', 'Р', 'С', 'Т', 'Ф', 'Х', 'Ч', 'Ц', 'Ш', 'Щ'
]);
const znak = new Set(['ь', 'Ь', 'ъ', 'Ъ', 'й', 'Й']);
const alpha = new Set([...glas, ...soglas, ...znak]);
let slog = '';
let slogLen = 0;
const len = word.length; const len = word.length;
word += ' '; if (len > 3) {
for (let i = 0; i < len; i++) { let slog = '';
slog += word[i]; let slogLen = 0;
if (alpha.has(word[i])) word += ' ';
slogLen++; for (let i = 0; i < len; i++) {
slog += word[i];
if (alpha.has(word[i]))
slogLen++;
if (slogLen > 1 && i < len - 2 && ( if (slogLen > 1 && i < len - 2 && (
//гласная, а следом не 2 согласные буквы //гласная, а следом не 2 согласные буквы
(glas.has(word[i]) && !( soglas.has(word[i + 1]) && soglas.has(word[i + 2]) ) && (glas.has(word[i]) && !( soglas.has(word[i + 1]) && soglas.has(word[i + 2]) ) &&
alpha.has(word[i + 1]) && alpha.has(word[i + 2]) alpha.has(word[i + 1]) && alpha.has(word[i + 2])
) || ) ||
//предыдущая не согласная буква, текущая согласная, а следом согласная и согласная|гласная буквы //предыдущая не согласная буква, текущая согласная, а следом согласная и согласная|гласная буквы
(alpha.has(word[i - 1]) && !soglas.has(word[i - 1]) && soglas.has(word[i]) && soglas.has(word[i + 1]) && (alpha.has(word[i - 1]) && !soglas.has(word[i - 1]) && soglas.has(word[i]) && soglas.has(word[i + 1]) &&
( glas.has(word[i + 2]) || soglas.has(word[i + 2]) ) && ( glas.has(word[i + 2]) || soglas.has(word[i + 2]) ) &&
alpha.has(word[i + 1]) && alpha.has(word[i + 2]) alpha.has(word[i + 1]) && alpha.has(word[i + 2])
) || ) ||
//мягкий или твердый знак или Й //мягкий или твердый знак или Й
(znak.has(word[i]) && alpha.has(word[i + 1]) && alpha.has(word[i + 2])) || (znak.has(word[i]) && alpha.has(word[i + 1]) && alpha.has(word[i + 2])) ||
(word[i] == '-') (word[i] == '-')
) && ) &&
//нельзя оставлять окончания на ь, ъ, й //нельзя оставлять окончания на ь, ъ, й
!(znak.has(word[i + 2]) && !alpha.has(word[i + 3])) !(znak.has(word[i + 2]) && !alpha.has(word[i + 3]))
) { ) {
result.push(slog); result.push(slog);
slog = ''; slog = '';
slogLen = 0; slogLen = 0;
}
} }
if (slog)
result.push(slog);
} else {
result.push(word);
} }
if (slog)
result.push(slog);
return result; return result;
} }