Словарь DIC алгоритм работы со звездочкой (*)

Говорящий текстовый редактор с открытым кодом, предназначенный для чтения вслух и записи в аудиофайл текстовых файлов с использованием пакетов речевых функций SAPI4\SAPI5.

Модератор: flegont

Ответить
Аватара пользователя
tonio_k
V.I.P.

Словарь DIC алгоритм работы со звездочкой (*)

#1

Сообщение tonio_k » 13 ноя 2018 16:42

Рассмотрим Простую схему предложения:
Прилагательное глагол существительное.
Если взять в контексте существительное и недалеко стоящее в предложении Прилагательное или глагол не разделенные знаками препинания, то с вероятностью 90% это Прилагательное или глагол относятся по смыслу к существительному. Это так же применимо во всех их комбинациях между собой.
Правила в словарях и ищут эти контексты так как смысловая нагрузка программе не доступна.
Более сложные сочетания со знаками препинания - это уже более сложные в выявлении закономерностей особенности русского языка.
Идём от простого к сложному:
применение звездочки как части слова вполне логична - так как облегчает замены связанные с закономерностями связок прилагаттельное с существительным
*ого рога=ого рогА
С учетом закономерностей русского языка можно предположить, что: "*ого (с оговоркой или уточнением) рога" тоже на выходе будет звучать как рогА Пример:
разбитого топором рогА
Причем вместо "топором" может быть "мечом", "силой мысли" и т.д. - т.е. непредсказуемое слово или два, а может и три!

Давайте вместо "силой мысли" применим ту же звездочку:
*тые * * рога=тые рогА

Но тут звездочка в Демагоге "перескакивает" простой по логике схему: звездочка = только слово, и сразу включает в себя дополнительные комбинации, которые к 90% вероятности правильности составления правила дает минус 10-20% на ложные срабатывания. Пример:
Проклятые рога. Два рога торчали из за камня.

Если *тые * * рога=тые рогА поставить как первое правило для срабатывания. а уточняющие правила при алгоритме перебора в конец:
Два рога=Два рОга
рога торчали=рогА торчали

то эти правила "подчистят" ложные срабатывания.

Но с другой стороны, если звездочку сделать ТОЛЬКО слово без знаков препинания, то придумать ошибочное срабатывание в контексте предложения *тые * * рога=тые рогА не так просто и мало вероятно встретить в реальном тексте.

Так что мое мнение, что звездочка очень эффективна как часть слова, но применяя ее в качестве отдельного слово а иногда и в качестве окончания слова - уже применять не сильно хочется.

А вот если * сделать как аналог (\w+) в rex словарях - то её применение станет на много удобнее и эффективнее.

На вопрос а что делать если нужен знак препинания? Его что, каждый раз прописывать?
Отвечу - да!
Если посмотреть словари которые применяются на практике, то правила, где "нужно" прописать какой либо знак препинания - обычно словосочетание, которое без этого знака наоборот делает правило ошибочным. Причем не какой угодно знак, а конкретный - например только точка или только запятая. Более того - есть правила, где нужно прописать ВСЕ знаки препинания КРОМЕ схемы: слово пробел слово. А звездочка и тут не применима, так как включает в себя не только знак препинания но и его отсутствие.

Вот мои рассуждения про сегодняшний алгоритм работы звездочки для Демагога.


Отправлено спустя 29 минут 1 секунду:
Пример рога торчали=рогА торчали - некорректный. Извините :boy_blushed:

Аватара пользователя
balaamster
Обыватель

Словарь DIC алгоритм работы со звездочкой (*)

#2

Сообщение balaamster » 13 ноя 2018 17:33

tonio_k писал(а):
13 ноя 2018 17:11
*ого рога=ого рогА
Правила со звёздочками, как и регексы с поиском по окончанию, коварны
"Обладатель большого рОга"
Я попался на правиле:
*ие руки=ие рУки

Но: движение рукИ, две тонкие рукИ
Хотя, вероятность таких сочетаний ниже, чем сильные рУки, маленькие рУки
Возможно, таким можно и принебречь

Аватара пользователя
tonio_k
V.I.P.

Словарь DIC алгоритм работы со звездочкой (*)

#3

Сообщение tonio_k » 13 ноя 2018 17:57

balaamster писал(а):
13 ноя 2018 17:33
регексы с поиском по окончанию, коварны
именно по этой причине у меня все правила со звёздочками вынесены в отдельный словарь и применяются к тексту первыми по очереди перед всеми остальными обычными словарями DIC. Так сказать от, обобщенных правил статистически средне вероятным (со звездочкой), к более конкретным и однозначным от двух слов в правиле к тресм словам и более. Тему звёзд поднял так как текущий алгоритм статистически уж "слишком" обобщен.

Аватара пользователя
flegont
V.I.P.

Словарь DIC алгоритм работы со звездочкой (*)

#4

Сообщение flegont » 13 ноя 2018 18:53

Принцип работы со звездочкой в dic-словарях меняться не будет. Звездочка - это любые символы. Это - общепринято и всем привычно.

Что же касается возможности для пользователей творить собственные алгоритмы словарных замен, на уровне скриптов, исключительно средствами Lua, не обращаясь к таким заимствованиям из Демагога, как функция WFilter() - будущее покажет.

Аватара пользователя
tonio_k
V.I.P.

Словарь DIC алгоритм работы со звездочкой (*)

#5

Сообщение tonio_k » 29 ноя 2018 19:26

:cheerleaderkid: ура! эврика!

Нашел схему, которая работает!
Проблемы, обсуждаемые в этой ветке с ограничением звездочки на предмет знаков препинания и перескакивания на следующее предложение типа:из * воды=из воды для словарей DIC больше не существует!

Схема:
Данная схема работает только в программе Демагог!
Нужно все правила со звездами, окруженные пробелами, перенести в отдельный словарь.Для их выявления Можно воспользоваться поиском по шаблону rex ^(.)*\s\*\s(.)*=(.)*(.)*$

Всего нужно 3 словаря:
1) словарь подготовки (REX )
2) словарь со звездочками (DIC)
3) словарь - чистка (DIC)
Словари должны сработать строго друг за другом между собой:

1) первый словарь - REX всего одна строка:

Код: Выделить всё

([а-яё])\b=$1_
2) второй словарь - каждое слово, в том числе и звездочка, в правиле (в его левой части) на конце должно иметь концовку "_", (обратите внимание как отделяются знаки препинания). Символ Концовка может быть любой - главное что бы он была уникальным (не встречался в тексте) и удобным при наборе и редактирования правил в словаре.
► Показать

Что бы "любое слово" соответствующее звездочке подставилось корректно, надо в правой части правила в том месте где оно должно подставиться - вставляем знак концовки "_" - окруженный пробелами.

3) словарь чистки - запускать ОБЯЗАТЕЛЬНО - в режиме прямого перебора.
► Показать
Пример для тестирования (правила для словаря см. выше):
► Показать
после обработки тремя словарями на выходе получаем:
► Показать

Аватара пользователя
flegont
V.I.P.

Словарь DIC алгоритм работы со звездочкой (*)

#6

Сообщение flegont » 29 ноя 2018 19:49

Любопытная методика! Принцип разделения буквенных и небуквенных символов.
Интересно, а как по затратам времени на больших словарях? И/или больших текстах - размером с книжку.

Аватара пользователя
tonio_k
V.I.P.

Словарь DIC алгоритм работы со звездочкой (*)

#7

Сообщение tonio_k » 29 ноя 2018 20:02

Скажу сразу, Этот словарь должен работать в режиме быстрого алгоритма. Так как в результате исправлений, текст становится уникальным и повторно к одному и тому же участку текста правила, которые находятся ниже не сработают. Если режим прямого перебора включен в настройках по умолчанию. То рекомендуется Этот словарь отсортировать по стандарту для словарей DIC. Хотя можно заморочиться и правую часть правила сразу записывать с концовкой На каждом слове. Тогда последовательный перебор будет применим.

Думаю это словарь будет работать по времени так же как обычный словарь dic со звёздочками. Зависит от алгоритма.


Отправлено спустя 6 минут 18 секунд:
Главное приемущество это быстрота и удобство в работе со словарем. Не требует особых знаний, как в rex словарях. Скопировал, вставил, добавил концовку добавил *_ и правило готово.


Отправлено спустя 15 минут 10 секунд:
Самое то главное не отметил!
( *_ ) - это значит что слово будет найдено без запятых! Т.е. полный аналог (\w+) в регулярных выражениях rex

Аватара пользователя
flegont
V.I.P.

Словарь DIC алгоритм работы со звездочкой (*)

#8

Сообщение flegont » 29 ноя 2018 20:58

Да, действительно, полный аналог \w+ Без любых препинаний, только буквенно-цифровые символы. Отличный результат.

Ответить

Вернуться в «Demagog»