Ответ Эдга в правильном направлении, я думаю - вам нужно отличать ключевые слова от пуха.
Контекст имеет значение. В качестве примера можно привести Core 2 Duo, если смотреть на два экземпляра T400, но не на OEM-пакет процессора.
Если вы можете указать в своей базе данных, какие части канонической формы названия продукта являются более важными и должны отображаться в той или иной форме для идентификации продукта, вам следует это сделать. Может быть, с помощью какой-то семантической разметки? Можете ли вы позволить человеку разметить базу данных?
Вы можете попытаться определить классы эквивалентности для таких вещей, как «Т-400», «Т400», «Т 400» и т. Д. Может быть, набор правил, которые говорят: «числа связываются сильнее, чем буквы, прикрепленные к этим числам».
Хорошим подходом может быть разбивка на случаи на основе производителя, номера модели и т. Д. Я бы порекомендовал вам взглянуть на методы определения терминов, чтобы попытаться сделать это: http://www.worldcat.org/isbn/9780262100854
Хорошей идеей было бы также спроектировать все в гибкой среде, которая в основном основана на правилах, где правила могут быть изменены в зависимости от ваших потребностей и возникающих плохих шаблонов (читай: вещи, которые нарушают ваш алгоритм). Таким образом, вы сможете улучшить производительность системы, основываясь на реальных данных.