Jeg har en string som jeg ikke kender indholdet af. Med udgangspunkt i denne ønsker jeg en liste over alle de ord som er i stringen (kun én forekomst pr. ord) samt antal gange ordet forekommer. Herefter skal jeg have en top 5 over ordene.
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
Dette er lige en hurtig hjemme-brygget algoritme, så det kan godt være der er nogle små-fejl, men jeg tænker den virker. Jeg er ikke helt sikker på de dynamic-size arrays, om det er sådan man laver dem i ASP.. Den har en køretid på O(n * m) (hvis det siger dig noget), hvor n er antal ord i teksten man søger i, og m er antal forskellige ord..
<% sText = "....." aText = Split(sText," ")
dim aWords() dim aOccurrence() iLen = 0
Function UpdateWord(sWord) bFound = False For u = 0 To UBound(aWords) If aWords(u) = sWord Then aOccurrence(u) = aOccurrence(u) + 1 bFound = True End If Next
If Not bFound Then aWords(iLen) = sWord aOccurrence(iLen) = 1 End If End Function
For i = 0 To UBound(aText) UpdateWord(aText(i)) Next %>
Hvis de dynamic-size arrays ikke virker, så kan du skrive
dim aWords(UBound(aText)) dim aOccurrence(UBound(aText))
, de kan hvert fald ikke blive større. Så ved jeg dog igen ikke om man henter længden af et array med UBOund :P
Synes godt om
Slettet bruger
07. april 2008 - 16:13#3
hvad med noget a la det her:
<% streng = "tjae... hvad med noget a la det her?" strstreng = split(streng," ") for a=0 to ubound(strstreng) antalgange=0 strdel = split(streng," ") for b=0 to ubound(strdel) if (lcase(trim(strstreng(a)))=lcase(trim(strdel(b)))) then antalgange=antalgange+1 end if next response.write strstreng(a) & ": " & antalgange & "<br>" next %>
Den finder jo ikke de fem størte - den udskriver dem bare :) I mit array kan man derefter løbe det igennem og finde de 5 største. Derudover vil din løbe array flere gange igennem end min, og dermed tage længere tid..
Jeg har lige implementeret Quicksort, så du ikke kun behøver finde de 5 mest brugte ord frem, men de "n" mest brugte ord. Samlet ser det således ud:
<% sText = "HER HAR DU DIN TEKSTSTRENG. JA HER ER DEN SÅ. HVORDAN ER DEN. DET FÅR VI AT SE. FOR HER ER DEN ALTSÅ." aText = Split(sText," ")
dim aWords() redim aWords(UBound(aText)) dim aOccurrence() redim aOccurrence(UBound(aText)) iLen = 0
Function UpdateWord(sWord) bFound = False For u = 0 To UBound(aWords) If aWords(u) = sWord Then aOccurrence(u) = aOccurrence(u) + 1 bFound = True End If Next
If Not bFound Then aWords(iLen) = sWord aOccurrence(iLen) = 1 iLen = iLen + 1 End If End Function
Function EvaluateString() For i = 0 To UBound(aText) Call UpdateWord(aText(i)) Next Call Quicksort(0,UBound(aOccurrence)) End Function
Function Swap(iOne, iTwo) sTemp = aOccurrence(iOne) sTemp1 = aWords(iOne)
aWords(iOne) = aWords(iTwo) aWords(iTwo) = sTemp1 End Function
Function Partition(iStart, iEnd) x = aOccurrence(iEnd) i = iStart - 1 For j = iStart To iEnd - 1 If Not aOccurrence(j) > x Then i = i + 1 Call Swap(i, j) End If Next Call Swap(i + 1, iEnd) Partition = i + 1 End Function
Function Quicksort(iStart, iEnd) If iStart < iEnd Then iSlice = Partition(iStart, iEnd) Call Quicksort(iStart, iSlice - 1) Call Quicksort(iSlice + 1, iEnd) End If End Function
Call EvaluateString()
' Dette er de 5 mest forekomne ord, hvor det øverste ord er forekommet mest. Response.Write aWords(UBound(aWords)) & "<br>" Response.Write aWords(UBound(aWords) - 1) & "<br>" Response.Write aWords(UBound(aWords) - 2) & "<br>" Response.Write aWords(UBound(aWords) - 3) & "<br>" Response.Write aWords(UBound(aWords) - 4) & "<br>" %>
Det ser jo ganske fornuftigt ud. Jeg takker for det.
Kunne du hurtigt lavet det muligt at udskrive antallet af gange ordre forekommer. Eks.:
Ord 1 (10 forekomster) Ord 2 (5 forekomster) Ord 3 (1 forekomst)
Smid et svar
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.