Я не знаю о Ruby, но для определения части речи слова (например, является ли это существительным) вам нужно то, что называется «частью речевого тегера».Для второй части, похоже, WordNet поможет вам.WordNet представляет собой базу данных английских слов (вы не сказали, какой язык вас интересует) с такими отношениями, как «похожий по значению», «более конкретный» (например, «кошка» более специфичен, чем «животное»), «противоположныйв значении "и т. д.