Интересная проблема. То, что вы смотрите, это классификация слов. Хотя вы можете изучать и использовать традиционные методы поиска информации, такие как АЛП и категоризация, основанные на них, я не уверен, что это ваше намерение (если оно есть, тогда сделайте это всеми средствами!:)
Поскольку вы говорите, что можете использовать внешние данные, я бы предложил использовать wordnet и его связь между словами. Например, используя wordnet,
# S: (n) **fishing**, sportfishing (the act of someone who fishes as a diversion)
* direct hypernym / inherited hypernym / sister term
o S: (n) **outdoor sport, field sport** (a sport that is played outdoors)
+ direct hypernym / inherited hypernym / sister term
# S: (n) **sport**, athletics
(an active diversion requiring physical exertion and competition)
То, что мы видим здесь, это список отношений между словами. Термин рыболовство относится к спорту на открытом воздухе , который относится к спорту .
Теперь, если вы получите дрейф - можно использовать это соотношение для вычисления вероятности классификации «рыбалка» на «спорт», скажем, на основе линейного расстояния цепочки слов или числа вхождений, и другие. (должно быть тривиально найти ресурсы о том, как построить меры подобия, используя wordnet. Когда проф говорит «не использовать Google», я предполагаю, что он имеет в виду программно, а не как средство для получения информации для чтения!)
Что касается C # с Wordnet - как насчет http://opensource.ebswift.com/WordNet.Net/