In theory it's of course possible to reach perfect performance: if the algorithm can find what it needs in the features to correctly distinguish between classes (or clusters), then it will perform perfectly.
In reality however it's very rare that performance is perfect, because:
- Text data is noisy and extremely diverse
- Most of the time when there is a way to obtain perfect performance, there is also a simple heuristic which can do the same job more efficiently than using ML. Basically ML is used precisely because the task is hard and/or the data is complex, so it's not surprising that there are errors.
In the case of your problem, I notice that you have labels for your data but you use an unsupervised topic modeling method, right? If this is the case you might want to try using a supervised method, since the system would have more clues to find the right answer. Also you use accuracy for evaluation, so be careful: accuracy can be misleading since it doesn't give any detail about the different classes.