Finne mønster i tekst

kongen

kongemedlem
Hvis jeg har denne stringen:

Kode:
$text = "Ole sitter å spiser kroneis sammen med Jørdis og Trude som spiser softis og marsipangris";

og i filen ordbok.txt så har jeg dette:

Kode:
{
      "mat":{
            "dessert":[
                  "is":["kroneis","softis","krokanis"],
                  "kake":["sjokoladekake","bløtkake"]
            ],
            "godteri":"marsipangris"
      },
      "navn":[
            "menn":["ole","per","pål"],
            "kvinner":["jørdis","kari","trude"]
      ]
}

Uten å søke spesifikk etter forskjellige is og navn, men ved å sammenligne $text med ordboken, hvis det er noen match så skal det spyttes ut noen variabler.

I dette tilfellet så skal disse variablene komme frem:

Kode:
$dessert = array("is", "kroneis", "softis");
$godteri= array("marsipangris");
$navn= array(array("menn","ole"),array("kvinner","jørdis","trude"));

Hvordan kan dette gjøres med minst mulig server-ressurser?
 

adeneo

Medlem
Du må dele opp $text, for eksempel ved å splitte på mellomrom (/\s+/g).
Dersom du har punktum, komma og slikt i teksten din, må du ta høyde for det også.

Det enkleste er gjerne å bytte ut "!?.," osv med et mellomrom og gjøre alt om til lowercase før du splitter.

Deretter er det bare å loope gjennom alle ordene i teksten, og sjekke om de eksisterer i ordboken din.
Ordboken ser ut som JSON, så det er vel bare å kjøre json_decode($ordbok, true); for å få noe som er lettere å sjekke med ordene fra teksten som nøkler osv.
 

kongen

kongemedlem
Krever slike looper mye serverkraft?

Hvis man har en megastor ordbok hvor alle verb, bøying av verb, substantiver, adjektiv, fremmedord, personnavn, byer, gatenavn, medisiner, dialekter, forkortelser lol, alle verdens produktnavn, etc, må man bruke sånn MapReducing da?
 
Topp