Создать массив уникальных комбинаций из массива строк

Я пишу что-то, что берет блок текста и разбивает его на возможные запросы к базе данных, которые можно использовать для поиска похожих блоков текста. (что-то похожее на список "похожих вопросов", который генерируется, пока я набираю это )Основной процесс:

  1. Удалить стоп-слова из текста
  2. Удалить специальные символы
  3. Из оставшегося текста создайте массив уникальных «стеблей»
  4. . Создайте массив возможных комбинаций массива стеблей (, где я застрял... типа)

Вот что у меня есть:

    //baseList starts with an empty array
    //candList starts with the array of unique stems
    //target is where the arrays of unique combinations are stored

    function createUniqueCombos(baseList,candList,target){

    for(var i=0;i<candList.length;i++){         

        //copy the base List
        var newList = baseList.slice(0);

        //add the candidate list item to the base list copy
        newList.push(candList[i]);

        //add the new array to the target array
        target.push(newList);   

        //re-call function using new array as baseList
        //and remaining candidates as candList
        var nextCandList = candList.slice(i + 1);       
        createUniqueCombos(newList,nextCandList,target);
    }

}

Это работает, но на блоках текста больше 25 слов или около того мой браузер вылетает. Я понимаю, что математически может быть огромное количество возможных комбинаций. Я хотел бы знать:

  1. Есть ли более эффективный способ сделать это?
  2. Как я могу определить минимальную/максимальную длину массива комбинаций?
7
задан Tomer 10 July 2012 в 13:58
поделиться