Avatar billede Majsen Juniormester
21. februar 2018 - 10:35 Der er 9 kommentarer og
1 løsning

Optælling af ord.

Hej.
Jeg sidder og laver et web site med artikler. Jeg vil gerne have en slags ord optælling, hvor jeg har 10 ord, som jeg gerne vil se hvor mange gange bliver nævnt i de forskellige artiklers headline og snippet (som jeg har kaldt underoverskriften).
Jeg har lidt svært ved at finde ud af hvordan jeg gør dette, er der nogen der kan vise et eksempel?
Tak :)
Avatar billede jakobdo Ekspert
21. februar 2018 - 11:09 #1
Avatar billede Majsen Juniormester
21. februar 2018 - 11:12 #2
Men hvordan får jeg den til at tælle forekomsten af de valgte ord i artiklerne, og ikke ordene i en string?
Avatar billede jakobdo Ekspert
21. februar 2018 - 11:36 #3
Altså noget kode er jo ikke så intelligent, så den kan sige: Tæl kun ord i "artiklerne".
Så du kan vel udtrække de artikler du ønsker og behandle dem en for en og samle resultaterne.
Avatar billede Majsen Juniormester
21. februar 2018 - 11:51 #4
Ja, det er selvfølgelig rigtigt.. problemet er så bare at artiklerne opdaterer løbende, så når der kommer nyere til ville det være fedt ikke at skulle behandle dem manuelt hele tiden!
Avatar billede jakobdo Ekspert
21. februar 2018 - 12:26 #5
Nu er det svært at gætte hvad dit setup er.
Men hvis jeg havde en hjemmeside, så ville jeg jo kunne lave:

//optællings-side

//udtræk data fra X artikler

//ord der skal tælles

//optæl ord i de artikler der er interessante

//vis resultat

og dermed skal det jo ikke laves manuelt.
Det kan sagtens laves automatisk, men det kræver du giver noget input.
Pt gætter jeg på hvad vi har med at gøre.
Jeg aner ikke om du har en wordpress blog, en statisk html side eller noget helt tredje.
Avatar billede Majsen Juniormester
21. februar 2018 - 12:34 #6
Har en HTML side, og arbejder primært med HTML og Javascript.
Jeg kan ikke rigtig udvælge artikler, da de bliver opdateret løbende, og derfor ikke bliver på siden særlig længe ad gangen.
Derfor vil jeg gerne have en optælling der opdaterer sammen med artiklerne.
Artiklerne får jeg ind via en API, så tænkte at man måske kunne sætte ord-tællings funktionen sammen med API'en.
Dette er den kode jeg har arbejdet med, men den virker ikke rigtig, men det er i hvert fald mit udgangspunkt:


    function splitString(stringToSplit, separator) {
          var arrayOfStrings = stringToSplit.split(separator);
    }
    var space = " "
       
       
var wordOne = 0;
var trump = 0
var olympics = 0
var russia = 0
var korea = 0
var yellow = 0
var politics = 0
var sports = 0
var year = 0
var weather = 0

var array = [];

var headlines = document.getElementsByTagName("h2");

for (var i = 0; i < headlines.length; i++) {
    var str = headlines[i].innerHTML
    var res = str.split(" ");
if(res == "police"){
wordOne++;

    }}
console.log(wordOne);
Avatar billede jakobdo Ekspert
21. februar 2018 - 17:56 #7
Hvis du loader artiklerne via et api, så giver det bedre mening at lave denne optælling inden du laver "html" af dit output fra dette api.
Det var noget med en US avis, var det ikke ?
Avatar billede Majsen Juniormester
21. februar 2018 - 18:13 #8
Det er via New York Times, dette er lavet i en JavaScript fil, da det er her min API også indgår! Jeg er bare ikke sikker på hvordan koden til en optælling skal se ud.
Avatar billede jakobdo Ekspert
21. februar 2018 - 19:18 #9
Kig på løsninger ala dette: https://stackoverflow.com/questions/20580662/count-certain-words-in-string-javascript

Så tæller de ord i en streng.
Avatar billede bvirk Guru
21. februar 2018 - 19:24 #10
Du får lige et bryg i vba - kan måske give ideer til implementation i javascript.

Function words(filename) As Dictionary
    Set words = New Dictionary
    Dim match, word
    For Each match In regex("\b[a-zA_ZæøåÆØÅ]+\b").Execute(fileInputString(filename))
        word = LCase(match.value)
        If words.Exists(word) Then
            words.item(word) = words.item(word) + 1
        Else
            words.Add word, 1: End If: Next
End Function

Function maxwords(filename, ByVal wCnt)
    Dim dic As New Dictionary, higest, i
    Set dic = words(filename)

    higest = reduce(dic.Items, max)
    While wCnt
        For Each i In dic.Keys
            If dic(i) = higest Then
                push maxwords, i & ": " & higest
                wCnt = wCnt - 1
                If wCnt = 0 Then Exit Function
            End If
        Next
        higest = higest - 1: Wend
End Function

teksten i dit spørgsmål er gemt i d:\text.txt
jl maxwords("text.txt",10) 'jl: join lines
jeg: 7
har: 3
og: 2
et: 2
vil: 2
gerne: 2
ord: 2
hvor: 2
som: 2
der: 2

Der er anvendt library kald af egen bryg, men da det blot er til inspiration til
javascript  implementering er disse ikke med her.
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester