Por su comentario, probablemente no quiera agrupar, sino clasificar (presumiblemente, spam y no spam). Para ello debería familiarizarse con un conjunto de herramientas de aprendizaje automático. Sin embargo, el negocio tf-idf puede ser útil para el preprocesamiento.
Si estás contento con Java, entonces Mazo y LingPipe son muy fáciles de usar. Todos estos conjuntos de herramientas harán las cosas de construcción de la matriz de documentos de términos, pero representarán los datos muy dispersos que resultan mucho más eficientemente y también le permitirán aplicar una variedad de modelos de clasificación. También he tenido buena suerte con BMLR pero para ello es necesario que construyas tú mismo los datos de entrada, aunque no es especialmente complicado.
Si desea permanecer en el modo de agrupación, la mayoría de las bases de datos tienen un módulo de búsqueda de texto completo que le permite identificar registros similares según tf-idf o métodos relacionados. Tratar directamente con esa función de similitud podría ser más útil para la posterior agrupación. Mejor aún, podría utilizar simplemente Lucene que está disponible en varios idiomas.