Fik du løst det? Ellers vil jeg da godt give et bud - det skal bare omsættes til kode.
Ud fra det eks. du selv giver, ser det ud til at du kan bruge følgende fremgangsmåde:
<pseudo-pseudo-kode>
Definationer:
"hele ord" er whitespace-terminarede char kombinationer som eks "dette", "er", "et", "ord" i strengen "dette er et ord".
karakterer er enkelte tegn. eks 'f' eller 'u'.
strenge er et punkt i en liste, eks "FC Århus".
Kode:
For hver streng i den liste der søges i:
{
Hele_ord = Tæl antal "hele ord" som matcher. (eks.: "ord" og "ORD")
Forkortelser = antal "hele ord" der enten har alle chars fra et ord i den anden liste, eller hvor et ord i den anden liste har alle chars fra dette ord. (eks.: "CPH" og "CoPenHagen")
}
Den streng med flest (hele_ord + forkortelser) er bedste match.
En udbygning kunne være at ændre (hele_ord + forkortelser) til (hele_ord * hel_ords_vægt + forkortelser * forkortelses_vægt) så du kan justere om hele ord eller forkortelser skal veje tungest.
Man kunne også vælge at tælle antal uens tegn, eller ord der ikke er pladseret samme sted, for at kunne udelukke evt. resultater hvor der er flere strenge som matcher lige godt.
--
Alternativet til denne traditionelle måde at gøre det på - som jeg ser det - er at lade en genetisk algoritme om at finde den bedste måde at udføre matchningen på, eller evt. træne et simpelt neuralt netværk til at genkende de bedste matches. Det er godt nok lidt at skyde gråspurve med kanonkugler, men kan muligvis være den eneste brugbare løsning hvis opgaven er bare en tand mere kompliceret end det du her beskriver.
Mere om neurale netværk på:
http://www2000198.thinkquest.dk/