Você precisa determinar as freqüências de cada palavra em cada documento indexado, é isso?
Só para quebrar seu galho, vou lhe mostrar uma forma bem simples de fazer isso.
Para facilitar, será necessário percorrer cada documento duas vezes (uma para determinar a lista de palavras, a segunda para calcular as freqüências.) Como são 10000 documentos isso deve ser razoavelmente rápido.
Primeiramente, crie um TreeMap<String,Integer> para conter as palavras lidas de todos os documentos. A chave é a palavra, e o valor é um número seqüencial que inicia por 0, que seria o índice da palavra. Esse TreeMap vai conter umas 10000 entradas, o que é pouco.
Depois, crie um array bidimensional de inteiros - esse array vai conter apenas 40 MB (10 milhões de entradas, cada uma com 4 bytes). Isso você pode ajustar no -Xmx - use -Xmx512M ou um pouco maior, de acordo com a memória de sua máquina. Uma das dimensões é o índice da palavra, e a outra o número do documento.
A seguir, leia novamente os documentos, e procure cada string no TreeMap que você criou no passo 1. Para cada palavra, pegue o índice da palavra, e incremente a freqüência no array bidimensional criado no passo 2.
Como você disse que tem de calcular o SVD desse array, pode até ser um array de double (nesse caso você vai precisar de 80 MB) - um array de float pode ter problemas de instabilidade quando você vai fazer os cálculos.