Вы можете реализовать алгоритм обучения, чтобы сделать это, используя метод Монте-Карло и обратную связь с людьми. Пусть система случайным образом распределит слова по категориям, а затем попросит вас проголосовать за них, как за «совпадающие» или «не совпадающие». Если оно совпадает, слово классифицируется и может быть исключено. Если нет, система исключает его из этой категории в будущих итерациях, поскольку она знает, что она там не принадлежит. Это даст очень точные результаты.
Это будет достаточно легко решить проблему из 100 слов. Для более масштабной проблемы вы могли бы объединить это с образованным предположением, чтобы ускорить процесс. Здесь, как уже упоминали многие люди, вам понадобятся внешние источники. Метод Google, вероятно, будет работать лучше, так как Google уже проделал огромную работу над ним, но, за исключением того, что вы можете, например, извлечь данные из своей учетной записи Facebook с помощью API Facebook и попытаться выяснить, какие слова статистически более вероятны появляться с ранее классифицированными словами.
В любом случае, этого нельзя сделать без какого-либо внешнего вмешательства, которое в какой-то момент пришло от человека. Если вы не хотите быть нахальным и, например, определите категории по некоторому сериализованному значению, содержащемуся в тексте ascii для имени: P