Кластеризация строковых данных с помощью ELKI

Мне нужно сгруппировать большое количество строк, используя ELKI на основе расстояния Edit / Levenshtein Distance. Поскольку набор данных слишком велик, я бы хотел избегать предварительно рассчитанных матриц расстояний на основе файлов. Как я могу

(а) загрузить строковые данные в ELKI из файла (только "Метки")?

(б) реализовать функцию расстояния для доступа к меткам (расширить функцию AbstractDBIDDistanceFunction, но как получить метки?)

Некоторые фрагменты кода или примеры входных файлов будут полезны.

1 ответ

Это на самом деле довольно просто:

А) написать Parser это подходит для вашего формата входного файла (зачем пытаться использовать синтаксический анализатор, написанный для числовых векторов с метками?), возможно, подклассы AbstractStreamingParser, производя отношение нужного типа данных (возможно, вы можете просто использовать String, Если вы хотите быть более общим TokenSequence может быть более подходящей концепцией для этих расстояний. Строки - это просто простейший случай.

Б) реализовать DistanceFunction основанный на этом типе вектора вместо DBID, то есть PrimitiveDistanceFunction<String>, Опять же, подклассы AbstractPrimitiveDistanceFunction может быть проще всего сделать.

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

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

Другие вопросы по тегам