Показать сообщение отдельно
  #47 (permalink)  
Старый 11.08.2022, 14:00
Аватар для Alikberov
Кандидат Javascript-наук
Отправить личное сообщение для Alikberov Посмотреть профиль Найти все сообщения от Alikberov
 
Регистрация: 16.08.2018
Сообщений: 109

Правилa не работают сами по отдельности:
while(part.length) {
		if(slab = part.match(Regulars[0])) { // Правило №1
			seps.push(slab[0]);
			part = part.substr(slab[0].length);
		} else
		if(slab = part.match(Regulars[1])) { // Правила №2 и №3
			if(next = part.substr(slab[0].length).match(Regulars[2]))
				slab[0] += next[1];
			seps.push(slab[0]);
			part = part.substr(slab[0].length);
		} else
		if(slab = part.match(Regulars[3])) { // Правило №4
			if(slab[0].length > 1 && part.charAt(slab[0].length).match(/[аеёиоуыэюя]/i))
				slab[0] = slab[0].substr(0, slab[0].length - 1);
			seps.push(slab[0]);
			part = part.substr(slab[0].length);
		} else {
			seps.push(part);
			part = "";
		}
	}
Види е здесь каскад условий, где все правила используются в комплексе?
Их я вынес из тела программы в INPUT-поля, чтобы можно было отладить и, добившись реально гораздо лучшего результата, вставить назад в тело алгоритма.
(Однако, эксперименты показали, что первоначальный исходный свод правил, хоть не идеальный, но редактированием мало что улучшает.)

Сам алгоритм, как можно видеть, практически никакой: Там просто идёт срабатывание одного из трёх правил (№1, №2 и №4) и одного подправила (№3 - №2.1).
Есть ещё подправило №4.1, но там одни гласные и его редактировать бессмысленно.

Сравните тела условий правил №2 и №4: Они практически одинаковы.
То есть, Вы сами можете удлинить цепь условий и добавить ещё больше правил.
(Я обошёлся именно тремя звеньями, так как это, ИМХО, оптимально в данной логике)

P.S.: Как выше я говорил, не плохо было бы добавить разбор суффиксов и окончаний (как и приставок, их ограниченное множество и в несколько регулярок вместить можно) перед данным циклом.
(Но в результате, лично я, сомневаюсь и не стал усложнять свою функцию.)

Последний раз редактировалось Alikberov, 11.08.2022 в 14:03.
Ответить с цитированием