Sie haben die Indizes der hervorgehobenen Wörter .. Ich denke, die unten ist eine gute, schnelle Ansatz, da es nicht "jedes Wort finden" (um die Kreisschleife zu tun). Um dies zu tun, verwendet es eine "Chunk-Größe", die von einer Anzahl von Zeichen anstelle von Wörtern abgeleitet ist. Sie könnten dann auf die nächste Wortendung "aufrunden" oder "abrunden" und dort haben Sie Ihren Brocken.
Die Methode zu erhalten, wie viele hervorgehobene Indices innerhalb einer "Chunk-Größe" voraus in Ihrer Probe sind, könnte besser gemacht werden, denke ich.
Pseudo
string GetHighestDensityChunk(){
// {chunk size} = 400 * average word length
// {possible start positions} = 0, highlighted indicies, and (sample - {chunk size})
int position
int bestPositionSoFar = 0
int maxHighLightedCountSoFar = 0
for each position in {possible start position}
{
highlightedCount = GetNumberOfHighlightedWithinChunkSize(position)
if(highlightedCount > maxHighLightedCountSoFar)
{
maxHighLightedCountSoFar = highlightedCount
bestPositionSoFar = position
}
}
// "round up" to nearest word end
// gives index of next space after end of chunk starting from current best position
{revised chunk size} = sample.indexOf(' ', startingAt = bestPositionSoFar + {chunk size}) - bestPositionSoFar
return sample.substring(bestPositionSoFar, {revised chunk size})
}
int GetNumberOfHighlightedWithinChunkSize(position)
{
numberOfHighlightedInRange = 0
// starts from current position and scans forward counting highlighted indicies that are in range
for(int i= {possible start position}.indexOf(position); i<= {possible start position}.length; i++){
if({possible start position}[i] < position + {chunk size}){
numberOfHighlightedInRange++;
} else {
break;
}
}
return numberOfHighlightedInRange;
}
+1, das ist, was ich gerade oben schrieb, dangit! –
+1 gute Antwort! – viksit