сравнивая "лайки" - PullRequest
       6

сравнивая "лайки"

1 голос
/ 10 ноября 2010

Предположим, вам нужно выполнить какое-то сравнение между двумя файлами. Это нужно делать только тогда, когда это имеет смысл, иными словами, вам не нужно сравнивать файл JSON с файлом свойств или файл .txt с файлом .jar

Кроме того, предположим, что у вас есть механизм, позволяющий разобраться во всех этих вещах, и что теперь сводится к фактическому имени файла. Вы бы хотели сравнить «myFile.txt» с «myFile.txt», но не с «SomeElse.txt». Цель состоит в том, чтобы быть как можно ближе к правилам "яблоки с яблоками".

Итак, вот и мы, с одной стороны у вас есть «myFile.txt», а с другой стороны у вас есть «_myFile.txt», «_m_y_f_i_l_e.txt» и «thingReallyClever.txt ».

Задача - выбрать ближайшее имя для последующего сравнения. К сожалению, идентичное имя не найдено.

Глядя на композицию персонажей, нетрудно понять, что это за отношения. Мой алгоритм говорит:

_myFile.txt   to   _m_y_f_i_l_e.txt                  0.312
_myFile.txt   to   somethingReallyClever.txt         0.16

Таким образом, _m_y_f_i_l_e.txt ближе к_myFile.txt, чем что-то на самом делеClever.txt. Фантастика. Но также говорит, что ist только в 2 раза ближе, где, как в действительности, мы можем посмотреть на 2 файла и никогда бы не стали сравнивать что-тоReallyClever.txt с _myFile.txt.

Почему?

Какую логику вы бы посоветовали мне применить, чтобы не только выяснить вероятность наличия символов в одном месте, но и проверить, имеет ли смысл определенный вес?

В моем примере, что-тоReallyClever.txt должно было иметь вес 0.0

Надеюсь, я проясняюсь.

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

Ответы [ 2 ]

2 голосов
/ 10 ноября 2010

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

Алгоритм сравнения слов

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

Конечно, любая разумная метрика здесь должна иметь низкую оценку как означающую близость (представьте расстояние между двумя строками) и более высокие оценки как означающую не так близко.

0 голосов
/ 10 ноября 2010

Звучит так, как вы хотите Расстояние Левенштейна , возможно, измененное путем предварительного преобразования обоих слов в один и тот же регистр и нормализации пробелов (например, замена всех пробелов и подчеркиваний пустой строкой)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...