Т9 подбор по буквам

reborn85 Закрыто

Очень часто бывает когда пишешь наименование параметров бывает пропускаешь какие то буквы и при этом подсказка перестает работать.

Думал что так и должно быть. Но сегодня в monaco увидел как она ищет и скажу что это круче, сейчас покажу на примере.

т.е. потерял одну букву и потерялось все.

а теперь в monaco

такой метод позволяет более эффективнее подбирать длинные или сложные переменные.

Комментарии

tormozit
#1, ред. 30 ноября 2024 11:15

Думаю для начала неплохо бы сделать небольшой шаг в этом направлении, который устранит самую частую проблему из моей практики. Она заключается в том, что в именах методов часто встречаются предлоги или мало значащие слова, которые труднее всего запоминаются из-за их малой значимости.
Например, чтобы скорее поднять на первое место в списке выбора нужный мне тип выражения "РасширениеПоляФормыДляПоляВвода" я ввожу "РаПоФоПо". Но получаю пустой результат, т.к. я пропустил предлог "для".
Поэтому предлагаю для начала научить фильтр пропускать слова (в данном случае "Для"), т.е. проверять начала всех слов правее. Это с одной стороны не так сильно замедлит фильтрацию как исходное пожелание, а с другой - покроет из моей практики самые частые ситуации.


amiralnar
#2, 30 ноября 2024 13:18


bolsun
#3, 04 декабря 2024 19:34

Потом начнется, как раньше было с умным фильтром в навигаторе. "Зачем подсказка мне выводит эти значения, по какому принципу???!!!"


bolsun
#4, 04 декабря 2024 19:35

Пока не отключил умный фильтр в навигаторе, все никак не успокаивались ))


amiralnar
#5, 06 декабря 2024 08:41

(1) tormozit, Это нормально что в комментарии подсказка срабатывает?


tormozit
#6, ред. 06 декабря 2024 22:25

(5) amiralnar, оффтоп! да


tormozit
#7, ред. 31 декабря 2024 10:29

(1) tormozit, Сделал такую фильтрацию в ИР https://www.hostedredmine.com/issues/998755. Потестировал. Теперь уверен, что она для меня оптимальна. Вроде бы ее единственное отличие от актуальной фильтрации Турбоконфа в том, что в моей допускаются пропуск слов.


tormozit
#8, ред. 19 января 2025 09:43

Уже много раз убедился что удобство предложенного мной алгоритма фильтрации, допускающего пропуски слов, для меня заметно выше. Вот еще пример

ОбщегоНазначения.УдалМасс


bolsun
#9, ред. 19 января 2025 12:59

Нужно четко понимать как он должен работать в разных случаях. Я изучил работу фильтров в разных IDE, все они работают по разному.

Также есть разные варианты набора слова.

  1. Слово набирается без заглавных букв (сложный случай, сейчас фильтр это понимает, ищет с учетом camelcase, но не допускает пропусков)
    "общназклисер" выведет ОбщегоНазначенияКлиентСервер
    "общназсер" - уже не выведет

  2. С заглавными (это простой случай, можно сделать фильтр как в навигаторе, там допускаются пропуски и неправильный порядок подстрок) и фильтр достаточно хорошо работает.

  1. Пропуски внутри частей слова.

"клчство" - должно вывести Количество

  1. Если применять все эти фильтры одновременно, нужно понимать какие у них приоритеты при сортировке.
    bolsun изменил статус на Открыто


tormozit
#10, ред. 19 января 2025 16:57

Разбивка введенной строки на слова (независимые фрагменты) по заглавным буквам - определенно имеет массу преимуществ. В случае наличия хотя бы одной заглавной буквы можно применять более сложный поиск. В этом случае строка (элемент списка) получает уровни бонуса в порядке убывания за

  1. Нахождение полной введенной строки в начале строки с учетом регистра букв, кроме первого символа ("удалитьЭ" находит "УдалитьЭлементМассива")
  2. Нахождение всех слов фильтра в началах слов строки в оригинальном порядке с разрешением пропусков (УдалМас находит "УдалитьЭлементМассива")
  3. Нахождение всех слов фильтра в началах слов строки в произвольном порядке (УдалМас находит "МассивДляУдаления")
  4. Нахождение всех слов фильтра в любых местах строки с учетом порядка (УдалМас находит "УдалитьЗамасленныйРадиатор")
  5. Нахождение всех слов фильтра в любых местах строки без учета порядка (УдалМас находит "ЗамасленныйРадиаторУдалить")

Если такая реализация будет слишком долго работать, то можно п.3 и п.5 не применять. Разрешение пропусков уже даст заметный выигрыш в удобстве.


tormozit
#11, ред. 14 февраля 2025 11:08

А вот для случая отсутствия заглавных букв в введенной строке тут сложнее ситуация, т.к. нужно по-хорошему проверять все варианты разбивки строки на слова, которых может быть очень много. Поэтому тут я в ИР применил сокращенный перебор вариантов, чтобы сохранить высокую скорость, что особенно важно для реализации на медленном встроенном языке.

Тут предлагаю применять аналогичный сокращенный вариант анализа (10), т.е. без п.3 и п.5 и проверять наиболее быстрые варианты разбивки на слова:

  1. Нахождение полной строки фильтра в начале строки без учета регистра букв
  2. Нахождение всех слов фильтра в началах слов строки в оригинальном порядке с разрешением пропусков ("удалмас" находит "УдалитьЭлементМассива")
  3. Нахождение всех слов фильтра в любых местах строки с учетом порядка (удалмас находит "УдалитьЗамасленныйРадиатор")
  4. Нахождение полной строки фильтра в любом месте строки без учета регистра букв без пересечения границы слов
  5. Нахождение полной строки фильтра в любом месте строки без учета регистра букв с пересечением границы слов

Если п. 3 будет тяжелым, то его можно не делать.


tormozit
#12, 19 января 2025 16:31

Пропуски фрагментов внутри одного слова, чтобы например "клчство" находило "Количество", укладываются в п.3 из (11)


tormozit
#13, ред. 19 января 2025 18:31

(11) Я сам редко заглавные буквы ввожу, т.к. лень. Поэтому думаю все же надо опираться на случай без заглавных букв как на основной. В ИР я этот алгоритм уже реализовал, кроме п.3


tormozit
#14, ред. 15 февраля 2025 16:34

Да. Алгоритм Турбоконфа в этих сценариях сильно проигрывает большинству конкурентов. И я с ними сталкиваюсь регулярно.
Вот очередной тестовый пример.
Я забыл имя метода (ТаблицаЗначенийИзКоллекцииЛкс), но помню что там было слово "таблиц" и "коллекц" и в данном случае даже помню их порядок. Пишу "такол" (ТАблиц+КОЛлекц).

Процедура ТаблицаЗначенийИзКоллекцииЛкс()
КонецПроцедуры

Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	такол	
КонецПроцедуры

Турбоконф выдает пусто

ИР выдает нужное слово

VSCode выдает нужное слово, но правда еще много мусора

EDT выдает нужное слово, но правда еще много мусора


tormozit
#15, 15 февраля 2025 16:28

Могу сам дописать нужный алгоритм C#, если дашь мне этот кусок исходников.


tormozit
#16, 25 февраля 2025 08:12

Напоминаю


bolsun
#17, ред. 07 апреля 2025 13:38

Новая реализация гибкого фильтра подсказки T9
6.4.9228.27042
https://disk.yandex.ru/d/nrcRx8lTUr_ccQ

Добавлена возможность пропуска букв и фрагментов слова.

Работа фильтра похожа на VS Code, но чуть более строгая (порядок символов обязателен) В VS из-за возможности несоблюдения порядка в результаты попадает намного больше мусора.

Подсветка пока работает только для старой реализации фильтра и нужно подумать нужна ли для расширенных совпадений, т.к. сразу видно что что-то не так с вводимым словом. Возможно стоит подсвечивать только вхождения по фрагментам.


tormozit
#18, 07 апреля 2025 14:53

Filter() System.MissingFieldException: Поле не найдено: "TurboConf.Shared.DisplayedItem.FlexibleFilter".
в TurboConf.Service.FlexibleFilter1.Filter(List1 items, String searchString, Func`2 GetValueForFilter)
в TurboConf.Service.NewT9Form.Filter()

Ссылка скрыта


bolsun
#19, 07 апреля 2025 14:55

(18) tormozit, замени файл

TurboConf.Shared.dll


tormozit
#20, 07 апреля 2025 15:39

Вроде работает, но без подсветки фрагментов недостаточно удобно.


tormozit
#21, ред. 07 апреля 2025 15:58

(17) bolsun, слишком много мусора выдает. Вот результат теста из (14), где алгоритм фильтра ИР выдает один результат:

Из-за отсутствия подсветки трудно понимать результат. Но похоже ты каждую часть фильтра ищещь в любом месте слов. Это на мой вкус редко полезно и чаще вредно. Поэтому я ищу не с начала слова только полный введенный фрагмент. А части фильтра ищу только по началам слов с пропусками.


bolsun
#22, ред. 07 апреля 2025 16:07

(21) tormozit, я же написал принцип такой же как в VS Code, только не допускается перестановка букв.
Вот пример

Видно, что ищет не только по началам строк.

Одно из пожеланий было разрешить пропуски букв (опечатки).


bolsun
#23, 07 апреля 2025 16:06

Еще пример


bolsun
#24, ред. 07 апреля 2025 16:10

Я думал ограничить поиск с пропусками только по первому фрагменту и что бы первая буква была обязательна

колие
Количество - попадет

КоличествоТоваров - уже не попадет

олие

Количество - не попадет

Тогда можно и допустить перестановку на случай опечаток.


tormozit
#25, ред. 07 апреля 2025 16:31

Зачем делать так же плохо как в VSCode? Мне кажется очевидным, что его алгоритм выдает массу бесполезных результатов, которые намного чаще крадут внимание чем приносят пользу.
В (11) я описал хорошо продуманный алгоритм.
Но да, я там не учел пропуски букв при быстрой печати, описанные в (0).
Поэтому предлагаю аккуратно дополнить его возможностью пропускать один символ в каждом слове в любом месте кроме его первой буквы. Например целевое слово ТаблицаЗначенийИзКоллекцииЛкс будет найдено запросами

  • тблкл
  • талко


tormozit
#26, ред. 07 апреля 2025 17:07

Еще похоже ты заехал в очень большие значения свойства "Приоритет", т.к. мой порядок сломался.
А мои значения начинаются от 100. Вот картинка из старого Турбоконфа

В новом Турбоконфе выше этого самого приоритетного для меня слова находятся как минимум десятки других слов.


bolsun
#27, 07 апреля 2025 17:30

(26) tormozit, приоритет еще не поддерживается.


bolsun
#28, ред. 07 апреля 2025 17:35

(25) tormozit, лучше разрешить пропуски и даже перестановки букв, но только в первом подходящем фрагменте. Как по мне работает очень хорошо. Мусора в этом случае вообще не будет.

Но попробую разрешить пропуск по одной букве (без перестановок) тоже, возможно это не приведет к мусору.


bolsun
#29, ред. 07 апреля 2025 18:01

Вроде бы разрешение на пропуск одного символа во фрагменте не приводит к появлению мусора


tormozit
#30, 07 апреля 2025 18:07

Без подсветки тяжело оценивать корректность работы фильтра. Но вроде бы последние картинки показывают меньше мусора. Очень хочется увидеть результат для моего теста

Процедура ТаблицаЗначенийИзКоллекцииЛкс()
КонецПроцедуры
	такол	


bolsun
#31, 07 апреля 2025 18:41

(30) tormozit,


bolsun
#32, ред. 07 апреля 2025 22:24

Новая версия алгоритма, мусора не наблюдаю совсем.

В первом найденном фрагменте допускается пропуск букв и их перестановка, но в последующих уже не допускаются.
В остальных фрагментах допускается пропуск не более одной буквы подряд.

Приоритет пока не поддерживается.
Подсветку добавлю, когда алгоритм будет окончательным.

6.4.9228.42969
https://disk.yandex.ru/d/a0LPXDXi9s-beA


tormozit
#33, ред. 07 апреля 2025 22:09

(32) bolsun, перестановка - слишком сильное отклонение. Опиши подробнее, какого вида перестановки учитываешь.


bolsun
#34, ред. 07 апреля 2025 22:16

(33) tormozit, любые. Первая буква должна совпадать обязательно.
На практике ищет отлично при опечатках.


bolsun
#35, 07 апреля 2025 22:19

Вот пример, все значение подходящие. Мусора нет


bolsun
#36, ред. 07 апреля 2025 22:26

Просто случайный набор букв набрал, но значения тоже все подходят


bolsun
#37, 07 апреля 2025 22:23

Дополнил описание алгоритма, что перестановка допустима только в первом найденном фрагменте. Если там она есть, то в следующих уже не допускаются пропуски.


tormozit
#38, ред. 07 апреля 2025 22:38

(35) bolsun, в чем практический смысл разрешать пропуски в 2 символа? Кажется это буде крайне редко приносить пользу. Один символ пропустить - да, иногда случается. Но более чем 1 - это уже мусорные захваты.
Пример: слка - Ссылка - тут пропущено 2 подряд символа "сы"

Опять же без подсветки очень трудо анализировать результаты. Получается как курица и яйцо. Ты не будешь добавлять подсветку, пока стабилизируется алгоритм. А я не смогу нормально тестировать, пока не буду видеть подсветку.


Евгений М.
#39, 07 апреля 2025 22:41

В снегопате, если нужен был фильтр по подстрокам, то я нажимал между словами shift+пробел.
Мне кажется, что при текущем варианте, когда нет разделения на слова, которые точно помнишь, в подсказке будет очень много лишнего. А так ты сам контролируешь какие части должен подхватывать поиск.


bolsun
#40, 07 апреля 2025 22:42

(39) Евгений М., предлагаю скачать и попробовать будет мусор или нет. Если будет - привести пример.


bolsun
#41, 07 апреля 2025 22:43

(38) tormozit, ты можешь хотя бы оценить релевантность выдачи, зачем прямо видеть какой символ входит? Если выдает правильные значения - значит алгоритм работает хорошо.
Если выдал ерунду - можно разобрать почему.


Евгений М.
#42, 07 апреля 2025 22:44

(40) bolsun, да, конечно попробую завтра на работе. Как раз вроде бы кодинг наконец-то намечается )


bolsun
#43, 07 апреля 2025 22:47

(38) tormozit, и в примере видно, что "склад" идет первым.
А если бы еще были значения, которые подходят без учета опечаток, они бы встали еще выше.
Ия не проверяю перестановки в первом слове, я проверяю наличие символов.


tormozit
#44, 07 апреля 2025 22:47

(41) bolsun, Ну тогда еще нужны замеры скорости. Слишком сложный фильтр кроме мусора еще будет дольше реагировать. Хочу понимать, что лишние захваты не несут ощутимого замедления. Прошу добавить также аналогичный замер в старый алгоритм.


Евгений М.
#45, 07 апреля 2025 22:47

(41) bolsun, я не очень понял какой в итоге алгоритм поиска и есть ли разделения на слова? По заглавным буквам? Или нет вообще? Просто анализируются все буквы, их пропуски и перестановки?


bolsun
#46, 07 апреля 2025 22:48

(45) Евгений М., есть разделения на слова.


bolsun
#47, 07 апреля 2025 22:50

(44) tormozit, ты запускал версию? Там выдается всплывашка с временем фильтрации.

Алгоритм даже быстрее старого.


tormozit
#48, 07 апреля 2025 22:51

(43) bolsun, ты писал " не проверяю перестановки в первом слове, я проверяю наличие символов". Этого я и боялся. Это примитивный подход, который дает много мусора. Распиши формулу вычисления рейтинга/приоритета/порядка для каждого слова, т.е. по какому принципу ты их сортируешь.


bolsun
#49, ред. 07 апреля 2025 22:53

(48) tormozit, напиши пример мусора, пока мы только теорию обсуждаем.

Что искал и ожидал, что выдало неправильно.


tormozit
#50, ред. 07 апреля 2025 23:03

Главная характеристика такого "фильтра" не в отбрасывании, а в упорядочивании результатов. А оно должно опираться на сложную формулу вычисления рейтинга. Где эта формула? Я свою описывал в (10).
С более примитивным фильтром и эта формула будет более примитивной и понизит качество сортировки.


tormozit
#51, ред. 07 апреля 2025 23:06

Я просил сделать одно аккуратное изменение в существующем алгоритме - учесть пропуски слов. Автор заявки просил учесть пропуск одного символа. Других острых потребностей вроде бы не было обозначено.


bolsun
#52, ред. 07 апреля 2025 23:07

(51) tormozit,

Я просил сделать одно аккуратное изменение в существующем алгоритме. Автор заявки просил учесть пропуск одного символа. Других потребностей вроде бы не было обозначено.

ну я не только заявки пользователей выполняю и свои идеи реализую.


bolsun
#53, 07 апреля 2025 23:13

В общем подожду реальных отзывов по работе алгоритма этой версии.
Если увижу проблемы с нечетким поиском по первому фрагменту - уберу или буду улучшать.


Евгений М.
#54, 07 апреля 2025 23:19

(46) bolsun,

есть разделения на слова.

По какому принципу разделяются?


bolsun
#55, 07 апреля 2025 23:20

(54) Евгений М., по тому же принципу, по которому и было (по большим буквам), только теперь допускаются пропуски фрагментов.


tormozit
#56, ред. 07 апреля 2025 23:22

Почему для фильтра "РаПоФо" на первом месте оказалось "РасширениеОформляемыхПолей"?


tormozit
#57, ред. 07 апреля 2025 23:26

Почему для фильтра "обмеспр" и "обспр" на первом месте оказалось "ОбъектМетаданныхПризнакУчетаСубконтоПланаСчетов"?


tormozit
#58, 07 апреля 2025 23:33

Почему для фильтра "сссы" на первых 3-х местах слова "Ссылка..."?


bolsun
#59, 07 апреля 2025 23:33

(57) tormozit, потому, что сломана сортировка в этой версии.


bolsun
#60, ред. 08 апреля 2025 00:05

Исправил сортировку и подобные случаи.


bolsun
#61, 08 апреля 2025 00:05

(60) не та версия, выложу другую.


bolsun
#62, 08 апреля 2025 00:09

6.4.9229.3808
https://disk.yandex.ru/d/XRPUNWQtrbwBUw


tormozit
#63, 08 апреля 2025 07:29

Message: Поле не найдено: "TurboConf.Shared.DisplayedItem.Priority".
StackTrace: в TurboConf.Service.Actions.T9.d0\]fpD{8#K"Dj\[puO~\]=8Fc".MoveNext() в System.Runtime.CompilerServices.AsyncTaskMethodBuilder.Start[TStateMachine](TStateMachine& stateMachine) в TurboConf.Service.Actions.T9.SmartCompletion(IntPtr fg, MainForm mainForm, Point oldPos, NotifyIcon notifyIcon, Keys key, ScreenForm statusForm, Boolean check, String curText, Boolean allowField, Int32 moduleLength, Boolean autoInvoke) в TurboConf.Service.MainForm.9jraBv"pUx4t\&~K=\,-,gd}!.n75[3Zd8:5eU&f2e$jGOq>?J#.MoveNext()
--- Конец трассировка стека из предыдущего расположения, где возникло исключение ---
в System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
ProductVersion: 6.4.9229.3809


Евгений М.
#64, 08 апреля 2025 07:58

(62) bolsun, из какого архива в итоге ставить? В последнем, судя по сообщению Сергея, ошибка.


bolsun
#65, 08 апреля 2025 10:29

(64) Евгений М., из этого, обновил архив.
6.4.9229.3808
https://disk.yandex.ru/d/XRPUNWQtrbwBUw


bolsun
#66, 08 апреля 2025 13:54

6.4.9229.28300

Улучшен алгоритм фильтрации
Добавлена подсветка вхождений (кроме нечеткого поиска в первом фрагменте)
Совпадения с пропусками букв или перестановками теперь имеют приоритет 0.
Убрано всплывающее уведомление с замером.

https://disk.yandex.ru/d/XRPUNWQtrbwBUw


tormozit
#67, 08 апреля 2025 19:04

Вижу мусор и к тому же на высоких позициях


tormozit
#68, 08 апреля 2025 19:06

(58) tormozit, в этом тесте теперь хороший результат.


tormozit
#69, 08 апреля 2025 19:07

(57) tormozit, в этом тесте теперь хороший результат.


tormozit
#70, 08 апреля 2025 19:08

(56) tormozit, в этом тесте теперь хороший результат.


tormozit
#71, 08 апреля 2025 19:11

Еще мусор на первой позиции


tormozit
#72, 08 апреля 2025 19:15

Тут тоже странный результат
Метаданные.СвойстваОбъектов.подре


bolsun
#73, 08 апреля 2025 19:51

Я сейчас проверяю наличие букв во всем первом фрагменте, можно улучшить выдачу если проверять наличие букв только в части фрагмента, длиной равной введенной строке. Это позволит обработать случайную перестановку букв и значительно уменьшить количество мусора.

Либо убрать совсем этот нечеткий фильтр, оставить только пропуски одной буквы.


bolsun
#74, 08 апреля 2025 20:07

Также можно установить приоритет -1 для таких слов. Т.к. если ты передаешь 0, то они могут оказываться выше.


bolsun
#75, 08 апреля 2025 21:23

6.4.9229.28300

https://disk.yandex.ru/d/XRPUNWQtrbwBUw

Улучшен алгоритм проверки опечаток, связанных с перестановками буква.
Уменьшено количество мусора из за нечеткого фильтра.
Улучшена сортировка, слова с перестановками букв теперь выводятся с приоритетом -1.


tormozit
#76, 08 апреля 2025 22:46

(71) tormozit, в этом тесте теперь хороший результат.


tormozit
#77, 08 апреля 2025 22:46

(67) tormozit, в этом тесте теперь хороший результат.


tormozit
#78, 08 апреля 2025 22:47

(72) tormozit, тут стало лучше но все равно видно одно странное слово


tormozit
#79, ред. 08 апреля 2025 22:59

фильтр "ме" не находит слово "Камень"
СтандартноеОформление.ме
СтатусСообщения.м


bolsun
#80, 08 апреля 2025 23:10

(79) tormozit, так и должно быть, обязательное условие первая буква должна совпадать с началом фрагмента.


bolsun
#81, ред. 08 апреля 2025 23:14

(78) tormozit, фильтр сработал правильно, из букв "подре" можно собрать "предо"

Непонятно, что ты пытаешься найти с запросом "подре", если бы были другие подходящие слова, они бы встали выше.


tormozit
#82, ред. 08 апреля 2025 23:16

(80) bolsun, кто просил делать такое условие обязательным? Вроде бы никто. Наоборот - до этого всегда отмечалось, что такие слова должна удовлетворять фильтру. И так работает старый фильтр Турбоконфа и все аналоги.


bolsun
#83, 08 апреля 2025 23:18

(82) tormozit, это не так.


tormozit
#84, ред. 08 апреля 2025 23:22

(81) bolsun, Я считаю такое поведение вредным, особенно без подсветки. Изначально речь шла только о погрешностях быстрого ввода. Опиши, как тебе кажется при быстром вводе из "подре" можно ввести "предо". Посчитаем суммарное расстояние перестановок и пропусков:

  1. "о" переместилось на 4 (!!!) позиции - комментарии тут я думаю излишни
  2. "д" переместилось на 1 позицию - ОК
  3. "р" переместилось на 2 позиции - не бывает такого от быстрого ввода
  4. "е" переместилось на 2 позиции - не бывает такого от быстрого ввода
    Итого общее отклонение 9 для фрагмента из 4 символов. Считаю что это явно мусорный результат.


bolsun
#85, 08 апреля 2025 23:22

(84) tormozit, что ты искал вводя "предо", почему нет других значений?


tormozit
#86, ред. 08 апреля 2025 23:28

(85) bolsun, я вводил не "предо", а "подре" ("ПОДчинный РЕгистр"). Пользователю достаточно понять, что подходящих результатов нет. Жестоко заставлять его разгадывать ребусы в виде кучи бесполезных результатов, которые показываются по непонятной причине.


bolsun
#87, 08 апреля 2025 23:24

(86) tormozit, что ты искал вводя "подре", почему нет других значений?


bolsun
#88, 08 апреля 2025 23:25

(87) tormozit, но его нет в подсказке. Это слово есть без фильтра?


tormozit
#89, 08 апреля 2025 23:28

(88) bolsun, без фильтра его нет.


tormozit
#90, 08 апреля 2025 23:33

(80) bolsun, смотри на старый алгоритм Турбоконфа - у него с этим все нормально. И главное - никто просил это менять.



tormozit
#91, ред. 08 апреля 2025 23:38

Все же я призываю вернуться на путь минимальных рисков - добавить то, чего остро не хватало, и минимизировать изменения, которых не просили, особенно если они отбрасывают то, что ранее считалось полезным.


tormozit
#92, 08 апреля 2025 23:40

(83) bolsun, хитро ты сделал снимок. Если навести туда указатель мыши, то появится полоса прокрутки и увидишь еще сотни результатов, где будут и вхождения внутри слова.


bolsun
#93, 08 апреля 2025 23:41

(92) tormozit, нет, я промотал список конечно, никаких "камней" там нет.


tormozit
#94, ред. 08 апреля 2025 23:51

(93) bolsun, проверил более тщательно. Да, VS Code не ищет полный фрагмент внутри слова, т.е. для "ме" не выдает "Камень". Тут я ошибся.
Но так делают

  • старый Турбоконф
  • EDT
  • ИР


bolsun
#95, 08 апреля 2025 23:45

(91) tormozit, вообще я не понимаю категоричность оценки алгоритма. Это прототип. Я написал новый алгоритм, для возможности реализации пропусков букв и т.д. и выложил, чтобы улучшить его.
То что пропало вхождение подстрок - это я узнал только что, т.к. не учел это при написании.


bolsun
#96, ред. 08 апреля 2025 23:47

Алгоритм проверки перестановок - тоже экспериментальный, отключается моментом, хотелось понимать его эффективность. Как я писал выше, возможно будет отключен.


tormozit
#97, 08 апреля 2025 23:49

(95) bolsun, по (80) я сделал вывод, что удаление проверки вхождений внутри слов было сделано умышленно и потому очень взволновался и попытался ярче донести глубину потери удобства.


tormozit
#98, ред. 08 апреля 2025 23:51

(96) bolsun, призываю его отключить хотя бы на расстояниях более 1


bolsun
#99, 08 апреля 2025 23:54

(98) tormozit, я не представляю пока как это сделать с минимальными затратами. Лучше отключить его совсем, раз не было таких запросов.
Как я понял даже текущий фильтр устраивает абсолютное большинство пользователей.


tormozit
#100, ред. 09 апреля 2025 00:01

(99) bolsun, да лучше тогда отключить. Текущий алгоритм фильтрации Турбоконфа действительно хорошо сбалансирован. Но для длинных имен, состоящих из большого числа слов, он ощутимо проигрывает менее жестким фильтрам из-за необходимости попадать в начала всех первых слов и моя просьба пропускать слова была нацелена устранить проигрыш в этой области.


bolsun
#101, 09 апреля 2025 00:03

(100) tormozit, насколько целесообразно выводить Камень при вводе "мень"?
Кто так будет делать и в чем польза?


tormozit
#102, ред. 09 апреля 2025 00:13

(101) bolsun, основные сценарии такие:

  • однокоренные слова с различными приставками - хочу искать по корню, например отГРУЗить-разГРУЗить-ПоГРУЗить, уБЫТие-отБЫТие
  • составные слова (несколько корней) - хочу искать по второму корню/подслову, например автоподКЛЮЧЕНие-автоОТКЛЮЧЕНие, полуАВТОМАТ


bolsun
#103, ред. 09 апреля 2025 00:12

(102) tormozit, ясно, никогда так не пользовался. Всегда первая буква у меня соответствует началу фрагмента.


bolsun
#104, ред. 09 апреля 2025 00:59

6.4.9230.5194

Отключен нечеткий поиск (перестановки букв).
Добавлена проверка совпадений по вхождению искомой строки (подсветки в этом случае нет, как и в старом алгоритме).

https://disk.yandex.ru/d/XRPUNWQtrbwBUw


tormozit
#105, 09 апреля 2025 06:58

(104) bolsun, теперь во всех тестах хороший результат. Еще бы подсветку для вхождения внутри слова добавить и будет отлично.


tormozit
#106, 09 апреля 2025 07:23

Сломался фильтр в списке методов


bolsun
#107, ред. 09 апреля 2025 14:27

6.4.9230.28584

  • Добавлена недостающая подсветка вхождений
  • Оптимизирован алгоритм фильтрации
  • Добавлен поиск с автоматическим преобразованием раскладки, как в старом алгоритме.
  • Исправлен фильтр в списке методов
  • Исправлен избыточный захват по поиску по фрагментам, из-за которого не попадали в результаты правильные значения. Это было и в старом алгоритме. Например в случае "допобр" фильтр не находил ДополнительныеОбработки, т.к. "допо" захватывалось первым фрагментом.

https://disk.yandex.ru/d/XRPUNWQtrbwBUw


tormozit
#108, 09 апреля 2025 18:59

(107) bolsun, Больше не обнаружил проблем. Отлично работает фильтр.


tormozit
#109, ред. 14 апреля 2025 07:58

Нашел небольшое снижение удобства нового алгоритма. Ввожу

Тип("наскомда
Тип("нкд

И вижу элемент "НастройкиКомпоновкиДанных" далеко не на первом месте.
И нет способа короткой строкой поднять ее повыше.
В моем алгоритме в ИР такая же проблема.

Нужен бонус к позиции за отсутствие пропусков начал слов (заглавных букв) и пропусков букв в начале слова (то что просил автор темы).


tormozit
#110, ред. 14 апреля 2025 08:04

(109) Устранил это неудобство в своем алгоритме в ИР https://www.hostedredmine.com/issues/1004074 и очень жду исправления в Турбоконфе.


tormozit
#111, 14 апреля 2025 09:07

(109) tormozit, еще яркий пример подобного заметного снижения удобства.
Хочу ввести "ОткрытьФОрму". Пишу "отфо" или "откфо" и не вижу нужного слова даже на первой странице списка.


bolsun
#112, 14 апреля 2025 16:16

6.4.9235.32631

За каждый пропуск фрагмента начисляется 1 понижающий бал
За каждый пропуск буквы внутри фрагмента начисляется 1 понижающий бал.

https://disk.yandex.ru/d/XRPUNWQtrbwBUw


tormozit
#113, 14 апреля 2025 16:29

Warning: System.MissingFieldException: Поле не найдено: "TurboConf.Shared.T9Item.Priority".
в TurboConf.Service.MainForm.‍‬‎‎‮‬‭‪‪‬‮‭‪‭​‍‫‮‫‫‎‪‭‎‌‌‌‬‮()
в TurboConf.Service.MainForm.ReloadScripts(Boolean showReport)
в TurboConf.Service.MainForm.‫‌‎‪‌‏​‌‬‫‬‬‌‪‪‎​‌‍‬‌‎​‮‎‮‏‪‮()
в TurboConf.Service.MainForm.‍‫‎‫‬‭‪‭‬‭​‬‪‫‭‍‏‍‭‏‭‫‍‏‎‍‮(Object , EventArgs )


tormozit
#114, ред. 14 апреля 2025 17:31

Еще сразу отмечу, что слишком большое множество значений атрибута "ПремияФильтра" - тоже плохо.
Вот как у меня выглядит сортировки списка
ТаблицаСлов.Сортировать("ПремияФильтра Убыв, Рейтинг Убыв")
Премия фильтра является главным полем сортировки. А внутри нее слова уже упорядочиваются по рейтингу соответствия контексту.
Поэтому у меня сделано всего 4 значения премии фильтра, чтобы не "глушить" роль затратного вычисляемого рейтинга соответствия контексту.

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


bolsun
#115, 14 апреля 2025 17:43

(113) tormozit,
TurboConf.Shared.dll


bolsun
#116, 14 апреля 2025 17:46

(114) tormozit, у меня нескольких атрибутов премии фильтра, приоритет фильтра - один, за ним сразу идет сортировка по приоритету слова.


tormozit
#117, ред. 14 апреля 2025 17:55

(116) bolsun, у меня так же. Твое "по приоритету слова" = мой "Рейтинг". Вот роль второго критерия сортировки ("приоритета"="рейтинга") в описанном тобой в (112) алгоритме будет сильно падать из-за избыточно мелкой нарезки первого критерия сортировки (премии фильтра). Поэтому предлагаю не начислять бал за каждый пропуск, а делать более консервативно - начислять балл за отсутствие пропусков.


bolsun
#118, 14 апреля 2025 18:04

(117) tormozit, попробуй сначала, как работает. Будут конкретные примеры неправильной сортировки - будем решать.
Пока мне нравится работа фильтра, чем больше ошибок при наборе - тем слово ниже.


tormozit
#119, 14 апреля 2025 18:16

(118) bolsun, хорошо. Буду ловить примеры для эффекта (114)


tormozit
#120, ред. 14 апреля 2025 19:44

Вот пример
ВидСравненияКомпоновкиДанных.Больше = срав
Тут я даю большой рейтинг за контекст слову ВидСравненияКомпоновкиДанных .
Но в списке оно оказывается дальше чем варианты с пропусками букв.

В моей реализации в ИР выглядит так

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


tormozit
#121, ред. 15 апреля 2025 08:37

Моя формула подробно (варианты):
ПремияФильтра = 4; // полное совпадение в начале первого слова
ПремияФильтра = 3; // полное совпадение в начале любого слова
ПремияФильтра = 2; // полное совпадение внутри любого слова
ПремияФильтра = 1; // полное совпадение с пересечением слов
ПремияФильтра = 3; // совпадение по началам слов без пропусков слов
ПремияФильтра = 2; // совпадение по началам слов, начиная с первого, с пропусками слов
ПремияФильтра = 1; // совпадение по началам слов, начиная с непервого, с пропусками слов


bolsun
#122, 14 апреля 2025 21:09

(120) tormozit, у меня полное совпадение по началу фрагментов, тоже имеет высокий приоритет, но в коде оставалась часть сортировки от предыдущего алгоритма. Исправил.

6.4.9235.41578

https://disk.yandex.ru/d/XRPUNWQtrbwBUw


tormozit
#123, ред. 14 апреля 2025 21:37

Проблема (120) ушла. Но поломался один старый тест

Процедура ТаблицаЗначенийИзКоллекцииЛкс()
	//такол
КонецПроцедуры

Тут слово ТаблицаЗначенийИзКоллекцииЛкс должно быть на первом месте.

Мой алгоритм выдает такое


tormozit
#124, ред. 16 апреля 2025 08:48

Еще тут сломалось
// принас

// обсер


tormozit
#125, ред. 17 апреля 2025 07:55

При расчете премии фильтра спец. символы в начале элемента возможно нужно пропускать, если их нет в фильтре, считая что элемент начинается с первого обычного символа.
Тут я дал большой приоритет элементу "#Если", но при вводе "Если" он все равно не на первом месте, т.е. нет возможности управлять относительным порядком таких элементов через приоритет.

Ну и хорошо бы между методами вообще не добавлять шаблоны "Если...", т.к. они там не имеют смысла.


tormozit
#126, 22 апреля 2025 20:58

(124) tormozit, На всякий случай сообщаю, что тогда вернулся на старый алгоритм, т.к. недоработки нового алгоритма пока перевешивают его преимущества.


bolsun
#127, 23 апреля 2025 15:18

(123) и (124) исправлено

6.4.9244.31039

https://disk.yandex.ru/d/sDvHyJ1geq6ncQ


tormozit
#128, 23 апреля 2025 19:38

(127) bolsun, другая проблема возникла. В модуле упр. формы ввожу "э" и вижу пустой список. Откатился на старый алгоритм и она показывает в том же состоянии нормальный список


bolsun
#129, 23 апреля 2025 20:59

(128) tormozit, не ту версию выложил (с зашитым тестовым набором данных).

6.4.9244.41299

https://disk.yandex.ru/d/XRPUNWQtrbwBUw


tormozit
#130, ред. 23 апреля 2025 22:08

//сссы - не выдал слово БизнесПроцессСсылка (полное совпадение с пересечением слов)


tormozit
#131, ред. 23 апреля 2025 22:09

// обсер - элемент, который не начинается с первой буквы фильтра, встал на первое место, хотя есть элементы подходящие по первой букве
ПремияФильтра = 2; // совпадение по началам слов, начиная с первого, с пропусками слов
ПремияФильтра = 1; // совпадение по началам слов, начиная с непервого, с пропусками слов


tormozit
#132, 23 апреля 2025 22:11

// СтатусСообщения.м - не раскрасились вхождения фильтра


tormozit
#133, ред. 23 апреля 2025 22:17

Тип("комп - на первое место попал элемент, который не начинается с полного фильтра, хотя ниже есть элементы, которые начинаются с полного фильтра
ПремияФильтра = 4; // полное совпадение в начале первого слова
ПремияФильтра = 3; // совпадение по началам слов без пропусков слов


bolsun
#134, 23 апреля 2025 22:43

(132) tormozit, вхождения из одной буквы не раскрашиваются намеренно, это бессмысленно.


bolsun
#135, 23 апреля 2025 22:44

(131) tormozit, здесь сработало понижение приоритета из-за нескольких пропусков фрагментов


bolsun
#136, 23 апреля 2025 22:46

(133) tormozit, повышу приоритет за полное начало слова.


tormozit
#137, ред. 24 апреля 2025 07:25

(135) bolsun, предлагаю все же не считать число пропусков, а учитывать только их наличие (117).


Евгений М.
#138, 24 апреля 2025 16:14

Ожидал, что модуль с полным совпадением наименования (УправлениеПечатьюПереопределяемый) будет стоять в первой строчке списка


bolsun
#139, 25 апреля 2025 12:13

(133) tormozit, исправил приоритет по началу слов

6.4.9246.25499
https://disk.yandex.ru/d/XRPUNWQtrbwBUw


bolsun
#140, 25 апреля 2025 12:17

(138) Евгений М., это конечно не относится к новому фильтру подсказки T9, который обсуждается в текущем топике. Т.к. в Навигаторе другой алгоритм работает.
Исправлю.


bolsun
#141, 25 апреля 2025 12:57

(138) Евгений М., исправлено

6.4.9246.26694

https://disk.yandex.ru/d/XRPUNWQtrbwBUw


tormozit
#142, 25 апреля 2025 13:49

(139) bolsun, проверил. Исправлено.


Евгений М.
#143, 25 апреля 2025 13:56

(140) bolsun, а почему бы не сделать один алгоритм фильтрации и в навигаторе и в подсказках? Смысл вроде бы один и тот же


tormozit
#144, ред. 25 апреля 2025 16:08

(143) Евгений М., потому что при вводе в коде пробел является внешним разделителем. А в поле ввода он точно разделяет фрагменты фильтра. Это оказывает большое влияние на трактовку фильтра - как минимум есть строгое деление на слова, поэтому можно их искать в любом порядке.
Если же пробелы в фильтре отсутствуют, то тут я в общем то согласен - можно было бы применять единый алгоритм.
Но правда есть еще небольшая разница - в списке автодополнения есть второй критерий сортировки - за соответствие контексту. Поэтому там вредна излишняя детальность первого критерия сортировки (премии за соответствие фильтру) (117). А вот в бесконтекстном списке можно было бы использовать и более детальный расчет такой премии.


tormozit
#145, ред. 26 апреля 2025 16:31

Не отбирает слово

ТаблицаТиповИзЗначения=1;
табизз

Ожидал такое


bolsun
#146, 27 апреля 2025 14:42

(145) tormozit, исправил

6.4.9248.29944

https://disk.yandex.ru/d/XRPUNWQtrbwBUw


tormozit
#147, 27 апреля 2025 16:39

(146) bolsun, Проверил. Исправлено.


tormozit
#148, ред. 01 мая 2025 12:36

Ввожу "Если" и не вижу на первой странице своего элемента "#Если Тогда" с Приоритет=100. Хотя почему то вижу "#ИначеЕсли". А мой элемент "#Если Тогда" оказывается в самом низу списка.

Как сортирует мой алгоритм - он пропускает первый небуквенный символ, снижая за это один балл премии фильтра, и далее прогоняет остаток строки по обычному алгоритму:


tormozit
#149, ред. 02 мая 2025 21:10

Еще похожая проблема. В списке есть слово "<СписокПараметров>".
Ввожу "сппар". Нужое слово не отбирается.

моим алгоритмом отбирается


tormozit
#150, ред. 05 мая 2025 15:25

Фильтр "рейс" не видит слово "РезультатРейсы".

QmHU4KTVKg.mp4

моим алгоритмом отбирается


tormozit
#151, 06 мая 2025 08:35

Ввожу "ОбрОбъект".
Элемент "ОбработатьЭлементыОбъекта" оказывается ниже, чем "ИмяМетодаОбработкиОбъекта".
Не соответствует премиям фильтра
ПремияФильтра = 2; // совпадение по началам слов, начиная с первого, с пропусками слов
ПремияФильтра = 1; // совпадение по началам слов, начиная с непервого, с пропусками слов


bolsun
#152, 06 мая 2025 14:42

(150) (151) (148) исправлено

6.4.9257.29959
https://disk.yandex.ru/d/XRPUNWQtrbwBUw


bolsun
#153, ред. 06 мая 2025 14:46

(149) tormozit, используй в этом случае Фильтр = "СписокПараметров".


tormozit
#154, 06 мая 2025 14:50

(150) tormozit, Проверил. Исправлено.


tormozit
#155, ред. 06 мая 2025 19:13

(148) tormozit, Проверил. Не исправлено.


tormozit
#156, ред. 06 мая 2025 22:43

(153) bolsun, Проверил. Фильтр "Список" позволяет отобрать небольшой набор элементов, содержащий нужный элемент.

Но я уже наделал много таких элементов с треугольными скобками. К тому же есть еще похожая нерешенная проблема с символом "#" (148) и еще в тексте запроса встречаются параметры с символа "&" и во встроенном языке метки с символа "~". Так что напрашивается какое то универсальное решение.
Напоминаю, как сортирует мой алгоритм - он пропускает первый небуквенный символ, снижая за это один балл премии фильтра, и далее прогоняет остаток строки по обычному алгоритму.

Вот аналогичный пример с именем параметра в тексте запроса, но тут конечно спецсимвол можно сразу вписать и тогда будет работать как надо, но это менее удобно чем было бы без ввода спецсимвола.



tormozit
#157, 06 мая 2025 19:28

(151) tormozit, Проверил. Исправлено.


tormozit
#158, 07 мая 2025 22:42

(156) tormozit, причем в твоем алгоритме заполнения списка тоже используются треугольные скобки и потому там такая же проблема. Например в модуле скрипта хочу добавить обработчик и опять нужные элементы слишком низко


bolsun
#159, ред. 13 мая 2025 15:43

6.4.9264.31393

  • Если первый символ - специальный символ, а вводимая строка не начинается со спецсимвола, то он отбрасывается со штрафом 1 балл.
  • Исправлена сортировка в списке методов.
  • Исправлена подсветка вхождений в некоторых случаях.

https://disk.yandex.ru/d/XRPUNWQtrbwBUw


bolsun
#160, 13 мая 2025 15:41

Тема стала неуправляемая.
Если возникнут какие-то еще случаи неправильной сортировки, прошу создавать отдельный тикет по каждому такому случаю.
bolsun изменил статус на Закрыто


tormozit
#161, 13 мая 2025 16:18

(159) bolsun, проверил изменение премии за первый спецсимвол. Работает.


bolsun
#162, 18 мая 2025 13:29

bolsun изменил статус на Закрыто


Для вставки изображения или файла, перетащите его в поле редактора или вставьте файл из буфера