私は、テキストのブロックを取得し、それを類似のテキストのブロックを見つけるために使用できる可能性のあるデータベースクエリに分解するものを書いています。(これを入力しているときに生成される「類似の質問」リストに似たもの)基本的なプロセス:
- テキストからストップワードを削除する
- 特殊文字を削除する
- 残りのテキストから、一意の「ステム」の配列を作成します
- ステムの配列の可能な組み合わせの配列を作成します(私が立ち往生している場所...一種)
これが私がこれまでに持っているものです:
//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ワード程度を超えるテキストのブロックでは、ブラウザがクラッシュします。数学的には、考えられる組み合わせが膨大な数になる可能性があることを認識しています。私が知りたいのは:
- これを行うためのより効率的な方法はありますか?
- 最小/最大の組み合わせ配列の長さをどのように定義できますか?