сравните строку с массивом ячеек в matlab и найдите наиболее похожий - PullRequest
2 голосов
/ 03 декабря 2011

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

Большое спасибо,

Хамид

Ответы [ 3 ]

4 голосов
/ 03 декабря 2011

Вы должны прочитать эту статью WP: Приблизительное совпадение строк и посмотреть " Расчет расстояния между строками " на FEx .

1 голос
/ 03 декабря 2011

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

Вот реализация matlab:

http://www.mathworks.com/matlabcentral/fileexchange/24559-longest-common-subsequence

После, просто сделайте что-то подобное:

[~,ind]=min(cellarray( @(x) LCS(lower(userInput),lower(x)), allFileNames));
chosenFile=allFileName{ind};

(функция LCS - самый длинный алгоритм общей подпоследовательности, а функция lower преобразуется в нижний регистр)

0 голосов
/ 03 декабря 2011

Не совсем то, что вы ищете, но вы можете сравнить первые несколько символов строки, игнорируя регистр, чтобы найти близкое соответствие.См. Команду strncmpi:

strncmpi Сравнение первых N символов строк без учета регистра.

TF = strncmpi (S, C, N) выполняет сравнение без учета регистра между первыми Nсимволы строки S и первые N символов в каждом элементе массива ячеек C. Вход S - это символьный вектор (или массив ячеек 1 на 1), а вход C - массив ячеек строк.Функция возвращает TF, логический массив того же размера, что и C, и содержит логический 1 (true) для тех элементов C, которые совпадают, за исключением буквенного регистра, и логический 0 (false) для тех элементов, которые не совпадают.Порядок двух входных аргументов не важен.

...