Форум — Development bash: нечёткие совпадения bash 1 3 как найти наиболее подходящее совпадение? например есть список:abcd abcde lolabzd zabdнадо найти наиболее похожее на abd expr? Ссылка
Ответ на: комментарий от Winnerer 12.01.14 08:54:22 UTC Тут скорее расстояние Левенштейна нужно BlackHawk ★ (12.01.14 09:08:38 UTC) Ссылка
$ bash -c "python3 -c \"import difflib;print(difflib.get_close_matches('abd',('abcd','abcde','lolabzd','zabd')))\"" ['zabd', 'abcd', 'abcde'] anonymous (12.01.14 09:46:01 UTC) Показать ответ Ссылка
Ответ на: комментарий от anonymous 12.01.14 09:46:01 UTC годно. megabaks ★★★★ (12.01.14 10:13:47 UTC) автор топика Ссылка
Ответ на: комментарий от aedeph_ 12.01.14 16:36:44 UTC zabdabcdнаиболее близкие megabaks ★★★★ (12.01.14 16:38:49 UTC) автор топика Показать ответ Ссылка
Ответ на: комментарий от megabaks 12.01.14 16:38:49 UTC Какие критерии? Больше символов совпадает? Последовательность учитываем или нет? anonimous ☆ (13.01.14 21:05:39 UTC) Показать ответ Ссылка
Ответ на: комментарий от anonimous 13.01.14 21:05:39 UTC я уже решил задачу.for agrep_opt in 1 2 3 B;do for use_opt in "${use}" "^${use}" "${use}$" "^${use}$";do similar_use="$(agrep -${agrep_opt} "${use_opt}" 2>/dev/null <<< "${ALL_USE}")" [[ -n "${similar_use}" ]] && (( $(wc -l <<< "${similar_use}") '==' 1 )) && break done [[ -n "${similar_use}" ]] && (( $(wc -l <<< "${similar_use}") '==' 1 )) && break [[ -z "${similar_use}" ]] || (( $(wc -l <<< "${similar_use}") '>' 1 )) && similar_use="" done megabaks ★★★★ (13.01.14 21:16:14 UTC) автор топика Последнее исправление: megabaks 13.01.14 21:18:01 UTC (всего исправлений: 2) Показать ответ Ссылка
ну если python, то и zsh сойдёт: zsh# for n in {0..4}; do print -n «$n:»; for i in abcd abcde lolabzd zabd; do [[ abd == (#a$n)$i ]] && print -n " $i"; done; print; done 0: 1: abcd zabd 2: abcd abcde zabd 3: abcd abcde zabd 4: abcd abcde lolabzd zabd zsh# arto ★★ (14.01.14 06:20:20 UTC) Ссылка
см. сюда: http://ru.wikipedia.org/wiki/Расстояние_Левенштейна emulek ★ (14.01.14 06:26:34 UTC) Ссылка
#!/usr/bin/php <?php echo levenshtein($argv[1], $argv[2]); ?> #!/bin/bash declare -a A A[0]="abcd" A[1]="abcde" A[2]="lolabzd" A[3]="zabd" for (( J = 0; J < 4; J++ )); do for (( K = 0; K < 4; K++ )); do if [ $J == $K ]; then continue fi echo -ne "${A[J]}\t${A[$K]}\t" ./lev.php ${A[J]} ${A[K]} echo done done abcd abcde 1 abcd lolabzd 4 abcd zabd 2 abcde abcd 1 abcde lolabzd 5 abcde zabd 3 lolabzd abcd 4 lolabzd abcde 5 lolabzd zabd 4 zabd abcd 2 zabd abcde 3 zabd lolabzd 4 emulek ★ (14.01.14 06:40:25 UTC) Ссылка
Ответ на: комментарий от megabaks 13.01.14 21:16:14 UTC я знал, что ты упорот, но не знал, что настолько... emulek ★ (14.01.14 06:43:42 UTC) Ссылка