When is a typo a typo?

I am using the levenshtein distance to recognize keywords despite typos, but i am wondering until which value the typo is still a typo or should be considered a different word. I am only comparing the input with certain keywords, so dont need to use grammar or context at all.

For example, the words "cat" and "bat" have a levenshtein distance of 1, which could very well be a typo, but "cut" and "bat" have a distance of 2 and are probably not what the user wanted to say.

EDIT: At which point does the UX suffer from keywords being recognized despite the user not meaning to type them. For example the key word "service" might be recognized from "srrvice" or "Servce", but should not be recognized from "Servant", 3 typos is a bit much. But where do i draw the line? Is "Servufe" still expected to be recognized as "service" or would the user be rather disrupted by my application recognizing that.

I thought of maybe allowing 1 levenshtein "point" for every 4 or so letters the input consists of, because the longer a word the more typos could be done, but i'm not sure if thats a valid assessment.

I couldn't find anything on that topic in the net, so, how many typos should be allowed for a word to be recognized?