Avatar billede justask Nybegynder
23. juli 2008 - 10:59 Der er 4 kommentarer

automatisk tag-cloud

Hej

Jeg kunne godt tænke mig at lave en automatisk tag-cloud. Normalt fungerer tag-clouds ved at brugerne af systemet noterer hvilke tags en bestemt tekst relaterer til - men er det ikke muligt at analysere teksten automatisk og trække de mest karakteristiske ord ud? Noget i stil med at fjerne intetsigende ord som "og", "til" og "ved", til man stort set kun ender op med f.eks. navneord o.lign. Jeg har kigget lidt på Zend Framework og Lucene, men ikke helt fundet en løsning.

Er der nogen der har gode ideer til en løsning - så man slipper for at kode det fra bunden af?
Avatar billede olebole Juniormester
23. juli 2008 - 16:41 #1
<ole>

Det kan hurtigt blive noget rod. Det engelske ord 'trunk' kan betyde 'træstamme', 'stor kuffert' eller 'elefantsnabel'. Det danske ord 'stamme' kan ligeledes have forskellige betydninger: 'at stamme fra', 'at st-st-sta-stam-stamme', 'en træstamme' eller f.eks. 'en indianerstamme'  =)

- og så er det vel (jvnf. teksten i dit spørgsmål) ikke teksten, der skal relatere til tags - men tags, der skal relatere til teksten. Der kan man bare se, hvor svært det er at finde ud af, hvad ordene i en tekst betyder  ;o)

/mvh
</bole>
Avatar billede olebole Juniormester
23. juli 2008 - 16:41 #2
'trunks' kan forøvrigt tilmed betyde 'underbukser'  =)
Avatar billede olebole Juniormester
23. juli 2008 - 18:26 #3
Med de nævnte forbehold, kunne du gøre noget à la (hurtigt skud fra hoften):

// Streng, der skal testes:
$s = "Jeg kunne godt tænke mig at lave en automatisk tag-cloud. Normalt fungerer tag-clouds ved at brugerne af systemet noterer hvilke tags en bestemt tekst relaterer til - men er det ikke muligt at analysere teksten automatisk og trække de mest karakteristiske ord ud? Noget i stil med at fjerne intetsigende ord som \"og\", \"til\" og \"ved\", til man stort set kun ender op med f.eks. navneord o.lign. Jeg har kigget lidt på Zend Framework og Lucene, men ikke helt fundet en løsning.";

// Predefinerede tags/ord.
// Her kan du tilknytte noget til hvert tag - f.eks. en streng.
// Ønsker du ikke at tilknytte noget, skriver du et ettal i stedet for strengen:
//    $aTags = array(
//        "jeg" => 1,
//        "tag" => 1,
//        "element" => 1,
//        "zend" => 1
//    );
$aTags = array(
    "jeg" => "Tagget 'jeg'",
    "tag" => "Tagget 'tag'",
    "element" => "Tagget 'element'",
    "zend" => "Tagget 'zend'"
);

// Associativt array, der vil indeholde antal af de fundne tags:
$aFoundTags = array();

// Callback funktion til preg_replace_callback:
function foo($aArg) {
    global $aFoundTags;
    if ($aFoundTags[$aArg[0]]) $aFoundTags[$aArg[0]] += 1;
    else $aFoundTags[$aArg[0]] = 1;
}

// Find de enkelte tags:
preg_replace_callback("/".implode("|", array_keys($aTags))."/i", foo, $s);

// Sorter de fundne tags:
arsort($aFoundTags);

// Brug skidtet til noget:
foreach($aFoundTags as $key => $val) {
    print "Antal: ".$val." - Ord/tag: ".$key." - Tilknyttet: ".$aTags[strtolower($key)]."<br>";
}
Avatar billede justask Nybegynder
24. juli 2008 - 09:51 #4
Tak for kommentaren - og jeg er ganske enig. Omvent beskriver du en driftstung service der risikerer hurtigt at blive forældet. Forestil dig at vedligeholde en tagcloud for f.eks. DR, google/news eller bare et sted som eksperten - du vil hele tiden skulle jage nye ord og konstant være bagud i forhold til nyeste hypes.

Hvis man kan analysere teksten og finde de 5 mest relevante ord kan man nok også udlede om der generelt snakkes IT, tøj eller indianere - og på den måde lave noget smart tag-kryds (vis mig "trunk" i forbindelse med "indianere"). Det er nok svært at få til at virke godt, men hvis bare man kunne finde de mest relevante ord tror jeg man er kommet langt.

Så; nogen bud på automatisk at finde de mest signifikante ord i en tekst?
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
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

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