22. april 2008 - 15:43Der er
7 kommentarer og 1 løsning
Macro til søgning af gentagne ord i kontekst.
Hej alle eksperter.
Jeg skal summere en stor mængde tekst som er samlet sammen af en hel række kilder. I den tekst, figurerer sætninger som f.eks. "af hensyn til sortering" flere gange - simpelthen som følge af gentagelser. Hvordan finder jeg eksempler på at 4 fortløbende ord står angivet flere gange?
Bemærk at det ikke er den specifikke sætning jeg skal finde - for der ville jeg bare bruge "søg" men derimod med følgende logik;
Søg efter "Jeg skal summere en" - findes xx gange. Søg efter "skal summere en stor" - findes xx gange. Søg efter "summere en stor mængde" - findes xx gange.
Måske kan du bruge noget i retning af makroen nedenfor. Den åbner en inputbox, hvori du kan indtaste den streng, du vil optælle (i denne version vil små og store bogstaver spille en rolle – skriv teksten nøjagtigt - eller kopier den fra dokumentet). Ved klik på OK benyttes Find til at finde og tælle antal forekomster, og en dialogboks viser resultatet til sidst.
Sub FindAndCountWordSequence() Dim n As Long Dim oRange As Range Dim strInput As String Dim strTitle As String
strTitle = "Tæl forkomster af tekststreng"
Set oRange = ActiveDocument.Range
Retry: strInput = InputBox("Indtast den tekst, for hvilken du vil optælle forekomster:", strTitle)
If Len(strInput) = 0 Then If StrPtr(strInput) = 0 Then 'Cancel clicked Exit Sub Else 'OK clicked, empty field MsgBox "Indtast en tekst. Prøv igen.", vbOKOnly, strTitle GoTo Retry End If Else 'input n = 0 With oRange.Find .Text = strInput Do Until .Execute = False n = n + 1 Loop End With End If
'Show result MsgBox strInput & vbTab & n & " gang(e)", vbOKOnly, strTitle 'Clean up Set oRange = Nothing End Sub
Funktionen virker, men giver ikke helt den oplistning som jeg havde i tankerne.
Jeg vil gerne, at logikken specificere hvilken kontekst der findes.
- Kan den søge på f.eks. de 4 første ord i et dokument, altså ord nr. 1,2,3 & 4 (på 120 sider) og bruge disse ord som tekststrengen der optælles. - Efterfølgende ord 2,3,4 & 5 og bruge disse ord som tekststrengen der optælles. - osv. osv. i et kontinuerligt loop indtil hele dokumentet er gnavet igennem?
Slutteligt at have en oplistning over hits af gentagelser pr. kontekst?
Det kan lade sig gøre – du kan bygge videre på den makro, jeg har lavet til dig.
Hvad skal du bruge det til? Hvis en side indeholder 500 ord, så har du ca. 60.000 ord i dokumentet, og det ville betyde, at makroen skulle lave omtrent lige så mange checks – og output i sidste ende ville være noget, der fylder ca. 60.000 linjer – noget i retning af 1.000 sider…
Det er et sammensurium af en masse beskrivelser der er lavet gennem de sidste 13 år. Mange af dem indeholder i bund og grund samme budskab og heldigvis har man valgt en formulering som gør det muligt at sige "det der har jeg da læst tidligere".
Så skal man nok kun bruge oplistningen såfremt der er "hit" 2 gange eller mere for at begrænse output...
OK, det kan også lade sig gøre sådan. Dog er det endnu en kompleksitet at indbygge i koden. Du kan evt. udnytte Find til at gennemløbe teksten og sørge for optælling.
Min browser opfører sig underligt. Jeg ville egentligt bare betale dig... :o)
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.