Avatar billede AnyFellow Seniormester
16. juni 2021 - 12:51 Der er 8 kommentarer og
1 løsning

Erstatning af en lang række ord i en tekst

Set fra brugerens perspektiv:
Brugeren henter en langt tekst, som vedkommende læser. Nogle af ordene i teksten er understreget. Ved at føre musen over disse ord popper yderligere informationer i relation til ordet op.

Teknisk:
Jeg har en tabel i en database indeholdende en lang række ord samt yderligere information.
Den lange tekst hentes fra en anden tabel.
Fx erstattes ordet "cykel" med "<span class="info" data="2">cykel</span>, hvor tallet 2 er ordet id i databasen. Jeg bruger jquery til at hente teksten fra databasen, når brugeren fører musen over ordet.

Hvordan løses det?
Jeg kunne hente alle ordene i databasen, lave en løkke der laver en søg/erstat ved brug af regulære udtryk i den lange tekst og så efterfølgende servere teksten for brugeren.
Jeg er bare i tvivl om, hvorvidt det er den mest fornuftige løsning, eller der er en metode jeg ikke har overvejet, som vil være mindre krævende for serveren.

Nogle forslag?
Avatar billede arne_v Ekspert
16. juni 2021 - 14:43 #1
Du kan gøre det server side (PHP) eller gøre det client side (JavaScript).

Det er et valg.

Du kan evt. lave en lille sammenlignende test inden du træffer valget.
Avatar billede ejvindh Ekspert
16. juni 2021 - 19:53 #2
#1: Men så kommer det vel også an på, om der i forhold til brugere er nogle spidsbelastninger (med mange brugere). For hvis der er det, kan der vel godt være noget med, at det i sådanne situationer alt andet lige er en fordel at køre det hos klienten. Mens det vel i lavintensitetsperioder alt andet lige er en fordel at køre det hos serveren?

Så derfor er det vel lidt svært at lave en ordentlig sammenligning i et udviklingsmiljø...
Avatar billede AnyFellow Seniormester
16. juni 2021 - 20:12 #3
#2 Der vil maksimalt være 50-75 brugere på serveren, så belastningen er nok ikke så vigtig. Jeg tænker eksekveringstiden nok er væsentligere.

Den må jeg prøve at teste både ved server eller klientløsningen.
Avatar billede acore Ekspert
17. juni 2021 - 10:14 #4
Er der ikke også en anden overvejelse?

Enten kan du (a) hente alle ordene i tabellen (antag der er M ord i tabellen)  og søge efter hvert ord i teksten (antag der er N ord i teksten) eller (b) du kan søge i tabellen efter efter alle ord i teksten.

(a) er det, du beskriver, og giver M "php søgninger" i teksten

(b)  giver N sql søgninger i tabellen

Mit gæt er, at M >> N, og hvis det er rigtigt, gætter jeg på, at (b) er hurtigere end (a).
Avatar billede AnyFellow Seniormester
17. juni 2021 - 12:34 #5
#4 Det kunne afgjort være en overvejelse, jeg ikke lige havde gjort. Teksten er dog så lang, at løsning (b( ville give flere søgninger end (a).
Avatar billede acore Ekspert
17. juni 2021 - 13:29 #6
Det ændrer så spørgsmålet til om M "php søgninger" i teksten er hurtigere end N sql søgninger i tabellen, når M << N. Hvilket i min optik er sværere at svare på.
Avatar billede AnyFellow Seniormester
17. juni 2021 - 14:52 #7
Jeg tænker at løsning (a) vil være hurtigst, her hentes ordene i et kald og teksten traveres x antal gange.

Ved løsning (b) vil der skulle laves et kald til databasen for hvert ord, samtidig med at teksten skal splittes og traveres.
Avatar billede acore Ekspert
17. juni 2021 - 15:25 #8
Split af teksten er hurtig - med explode(...). Tabellen er indekseret. Tjaaa..

Du kunne jo ret let tage tid på  (a) et kald til databasen efter et ord (tN msek) og (b) en søgning i teksten efter et ord (tM msek).

Hvis du har et repræsentativt antal ord i både tabel (M) og tekst (N), skal du se på

Løsning a: tM x M
Løsning b: tN x N

Som altid - hurtigste vinder ;)
Avatar billede AnyFellow Seniormester
18. juni 2021 - 08:04 #9
Enig, tak for deltagelsen.
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