Which approach to select category based on keywords I want to assign a certain category to a group of keywords.
So i.e. people can upload images or videos, when they do this they can set keywords for this.
These keywords are free to type so words can be spelled in different ways.
The amount of keywords are 95% between 0 and 20 words.

I want to create categories from these. So that I can assign a combination of keywords to a category.

The categories and the amount of categories are undefined.

From what I've researched is that this is probably a Topic modeling or clustering issue. Although with topic modeling most examples I see are based on long texts instead of a couple of keywords. 

What would be a good approach to handle this?

I thought about first some simple fuzzywuzzy to find different spellings of the same words.

Create a big word list from this. Then each keyword will be matched against the list and rewritten if it matches one and added if there isn't a good match.

Then I would need to create groups and here I don't know which algorithms I should use.

I was thinking maybe do k-means clustering and then see on which k I get the best results and then assign a category to it manually by looking at which keywords are in it.

So it would be nice to just let the algo figure the amount and categories out, but it can be relaxed that I will set them before.

Does anyone have a better suggestion or are there just complete algorithms for this already available?
Does anyone have a better suggestion or are there just complete algorithms for this already available?


Apparently you want to do information retrieval (IR) but without the information part: normally an important part of the IR process is the set of documents that the user is searching for (for example text, images video). This is important because knowing the documents which correspond to a query gives semantic information about the keywords.

Now, if you only have the keywords available then there's no semantic to help with the clustering. So you are right that the only thing you can use is the spelling. i assume that by " simple fuzzywuzzy" you mean "fuzzy matching", i.e. using string similarity measures. I can think of two options:


You can compare each keyword with each other with some string similarity measure such as Levenshtein edit distance, Jaro, or characters n-gram based Jaccard, cosine etc.
You can represent each keyword as a vector based on the char n-grams in the word, then you can apply clustering with k-means for example.


Topic modeling techniques wouldn't work because you don't have large text documents.