Write a function in any preferred language that takes a string as input and return a dictionary where the keys are words and the values are the number of times each word appears in the string.
Ignore case (e.g "Hello" and "hello" should be counted as the same word).
Ignore punctuation (e.g "Hello," and "hello!" should be counted as the same word).