Нечеткое сопоставление значений типа Дата
У меня нет реального вопроса, но я больше похож на творческий подход к проблеме.
Я хочу сравнить два (скорее всего, неравных) значения даты и рассчитать коэффициент их сходства. Так, например, если бы я сравнил 08.01.2013
а также 10.01.2013
Я бы получил относительно высокое значение, но между 08.01.2013
а также 17.04.1998
это было бы действительно низко.
Но сейчас я не уверен, как мне точно рассчитать сходство. Сначала я думал о том, чтобы превратить значения Date в строки, а затем использовать EditDistance для них (количество отдельных операций с символами для преобразования одной строки в другую). Это кажется хорошей идеей для некоторых случаев, и я определенно буду ее реализовывать, но мне также нужен соответствующий расчет для чего-то вроде 31.01.2013
а также 02.02.2013
2 ответа
Почему бы не использовать разницу в днях между двумя датами в качестве отправной точки? Это "низкий" для похожих дат и "высокий" для неравных дат, затем используйте арифметику для получения "коэффициента сходства", который соответствует вашим требованиям.
Считайте фиксированную контрольную дату "достаточно ранней" в прошлом, если вы застряли.
Расстояние редактирования может быть рассчитано с использованием расстояния Левенштейна.
Изменение года означало бы гораздо большее "расстояние", чем изменение дня. Обычный способ сравнить дни - рассчитать расстояние в днях или часах. Для этого вам нужно конвертировать обе даты в серийный номер дня. Microsoft предлагает функцию DateDiff() для сравнения дат и вычисления расстояния.