Комментарии 8
Здравствуйте, Андрей! Спасибо за материал. Тема очень интересная. Где можно получить подобные знания - я имею в виду, на стыке лингвистики, морфологии и ИТ? Может быть университеты, кафедры посоветуете?
Добрый день.
Есть такое развлечение - смотрите книги по запросу 'information retrieval', и почти все будут путными. Статьи, в том числе и, конечно же, на habr.
Ну и общение с себе подобными :)
Я, кстати, запланировал публикацию подробной статьи по морфологическому анализатору, но сделаю только когда дойдут руки выложить украинский и английский вдобавок к русскому. Пока для этих языков в репозитории только намёки.
Обычный тип с плавающей точкой IEEE-754 содержит последовательно: бит знака, экспоненту в смещённом коде, остаток мантиссы или денормализованную мантиссу.
Так вот, если откусить бит знака, а остальную часть интерпретировать как целое, то окажется, что сравнение этого числа соответствует сравнению модуля исходного числа.
Откусываем бит знака, получаем целое число. Если бит знака - флаг, меняем знак на минус. В результате получается целое, отсортированное в том же порядке, как исходный float.
Да, конечно.
Однако у нас стоит немного другая задача - хранить поисковые ключи в оглавлении обратного индекса. Там и лексемы в их морфологическом представлении; и иероглифы - фактически, строки; и числа.
Физическое представление такого оглавления - разного рода деревья, например, префиксное или patricia. Ключ - последовательность байт. Поиск по диапазону - поиск первого GE ключа для нижней границы и последовательная выборка ключей, пока LE верхней границе.
Если физический int туда повесить - сортировка для него будет на каких-то программно-аппаратных платформах правильной, на каких-то - обратной.
Вплоть до последних версий стандарта представление таких чисел implementation-defined, https://eel.is/c++draft/basic.fundamental#12. Значит, реализация может различаться уже на уровне разных версий компиляторов.
Способ представления числовых ключей для обратного поискового индекса