vmbvmb
Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Полундра) История с индексацией, описанная чуть выше на этой странице, кажется, привела к открытию фундаментального бага в Lingvo x6. Я всё ещё надеюсь, что дело только в моей индивидуальной ситуации, то есть что мне попался или глючный DSL компилятор, или глючный Lingvo. Поэтому прошу тех, кто пользуется Lingvo x6, проверить мои наблюдения, подтвердить их или опровергнуть. Возможно, стоит перебдеть и проверить остальные версии тоже. Хотя вряд ли такой баг остался бы незамеченным раньше. Всё-таки, на Lingvo x6 перешло не так много людей, насколько я могу судить по частой критике этой версии, и он обделён вниманием пользователей и тем самым обделён тестированием. Так вот. После завершения индексации я на радостях взялся проверять полнотекстовый поиск, и вроде бы всё было нормально. Но со временем я стал то и дело сталкиваться со странными случаями: полнотекстовый поиск не находил фразы в словарях, которые точно были индексированы и в которых эти фразы есть. Например, у меня есть огромный Urban Dictionary, который индексировался больше часа и добавил к файлам индекса больше гигабайта, но при этом в нём ничего не находится. Проблемными были, в том числе, словари, о которых я точно помнил, что компилировал их с галочкой автоматической подготовки к индексации, так что дело не могло быть в отсутствии индексных тегов. Тяжко вздохнув, я стал проверять индексацию поиском словарь за словарём, все 400 словарей с лишком. Нашёл около 60 словарей, в которых или ничего не искалось, или почему-то искалось частично. Я стал думать, какие могут быть закономерности, и одна из догадок подтвердилась. Я проверил в Total Commander все пользовательские .lsd словари на наличие тегов trn (т.е. ручная разметка) и trn1 (т.е. автоматическая разметка). Дело в том, что в большинстве случаев — т.е. если первый тег trn или trn1 встречаются не очень далеко от начала dsl исходника — в бинарном .lsd сохраняется как минимум одно находибельное сочетание символов данных тегов. Их можно заметить, если открыть файл в бинарном редакторе или просмотрщике. Также можно запустить поиск по .lsd файлам (например, при помощи Total Commander), задав строку в hex-представлении этих тегов (если не ошибаюсь, это будет кодировка UTF-16 big endian): Код: для trn1: 00 5B 00 74 00 72 00 6E 00 31 00 5D в hex-редакторе отображается как .[.t.r.n.1.] для trn: 00 5B 00 74 00 72 00 6E 00 5D в hex-редакторе отображается как .[.t.r.n.] | Результаты поиска я разбил на две группы, файлы с trn и с trn1. В нескольких файлах не нашлось ни одного тега, я их декомпилировал и пришёл к выводу, что всё дело в упомянутом обстоятельстве: в них один из этих тегов был далеко от начала исходника; видимо, компилятор, чем дальше, тем больше сжимает текст, и относительно читаемым он остаётся в бинарном файле только в начале. Оказалось, что проблемные файлы полностью совпали с группой словарей, в которых содержался тег trn1 (т.е. которые были компилированы с галочкой автоматической подготовки к индексации). Причём смешанное поведение поиска — когда часть фраз ищется, а часть нет — объясняется следующим обстоятельством, выявленным после декомпиляции и анализа DSL. Если фраза заключена только в тег trn1, она не ищется. Если внутри тега trn1 вставлены другие поисковые теги — com и ex — фраза ищется. Мне попалось даже несколько очень странных словарей, в которых встречались вместе теги trn и trn1, иногда внутри друг друга, иногда нет. В таком случае слова внутри trn искались. Я перекомпилировал один из словарей, но вместо автоматической индексации вставил ручное облечение карточек в тег trn и снял галочку автоматической подготовки — и поиск в словаре заработал. Если это действительно баг, общий для всех версий Lingvo x6, наверное, нужно будет внести это во все шапки касающихся тем и в справочник по DSL. То есть советовать ни в коем случае не пользоваться автоматической подготовкой к индексации в Linvo x6. Или даже советовать создателям словарей перестраховываться и облекать неразмеченные поисковыми тегами карточки в тег trn, если предусмотрена поддержка пользователей Lingvo x6. | Всего записей: 328 | Зарегистр. 18-11-2010 | Отправлено: 03:06 01-02-2020 | Исправлено: vmbvmb, 03:11 01-02-2020 |
|