비슷한 명령어 추천은 어떻게 하는걸까?
(xo.dev)터미널에서 여러 프로그램을 사용하다 보면 종종 명령어를 잘못 입력해 프로그램이 오류를 표시해줄 때가 있다. 그런데 Git이나 npm 같은 일부 프로그램들은 내가 잘못 입력한 명령어와 비슷한 명령어들을 추천해주거나 오히려 오타를 바로잡아주고 알아서 적당히 넘어가 줄 때도 있다. 이런 기능은 대체 어떻게 작동할까? 비슷한 명령어를 추천해주는 기능을 비슷하게 구현해보며 그 원리를 알아본다.
- 문제 정의하기
ㅤ→ 비슷한 명령어를 찾는다는 문제는 "두 문자열의 유사도를 검사하는 문제"로 치환할 수 있다.
- 편집 거리 (Edit distance)
ㅤ→ 레벤슈타인 거리 (Levenshtein distance)
- 문제 해결하기
재미있게 읽었습니다.
그런데 git이 정말 이 방식으로 구현된 것인지 궁금하네요.
통계적으로 사용자의 경험을 수집해서 처리하는 방식도 가능할 것 같네요
git 은 레벤슈타인 거리를 이용합니다. 아래 링크의 git 항목에 보면 git 의 해당 부분 소스코드가 나옵니다. :)
https://vishnubharathi.codes/blog/levenshtein-distance/
통계적으로 사용자의 경험을 이용하는 방식도 흥미로울 것 같은데, a) git 명령어들의 길이가 짧고, b) 갯수가 제한되어 있어서 레벤슈타인으로 충분히 원하는 것을 수행할 수 있는 것 같습니다.