我想統計文檔中特定短語的出現次數。例如「stackoverflow論壇」。假設D表示包含這兩個詞的文檔集。快速高效的數組計算
現在,假設我有下面的數據結構:
A[numTerms][numMatchedDocuments][numOccurInADocument]
其中numMatchedDocuments是d和numOccurInADocument的尺寸是一個特定的文檔中出現的特定術語出現的次數,例如:
A[stackoverflow][document1][occurance1]=3;
表示術語「堆棧溢出」出現在文檔「document1」中並且其第一次出現在位置「3」處。
然後我選擇發生最少的術語並遍歷所有位置,以查找「論壇」是否出現在位置+1當前術語「stackoverflow」位置。換句話說,如果我在位置4找到「論壇」,那麼這是一個短語,我找到了匹配。
匹配是直接的每個文件,運行速度相當快,但是當文件數量超過2,000,000時,它會變得非常緩慢。我已經將它分佈在覈心上,當然它會變得更快,但是不知道算法是否有更好的方法。
感謝,
Psudo碼:
boolean docPhrase=true;
int numOfTerms=2;
// 0 for "stackoverflow" and 1 for "forums"
for (int d=0;d<D.size();d++){
//D is a set containing the matched documents
int minId=getTheLeastOccuringTerm();
for (int i=0; i<A[minId][d].length;i++){ // For every position for LeastOccuringTerm
for(int t=0;t<numOfTerms;t++){ // For every terms
int id=BinarySearch(A[t][d], A[minId][d][i] - minId + t);
if (id<0) docPhrase=false;
}
}
}
也許在代碼中發佈您的當前實現僅供參考。 – OmniOwl
你的問題是什麼? –
@MelNicholson ......但不知道算法上是否有更好的方法。 – DotNet