https://talaat.dev/blog/understanding-natural-language-processing