Avatar billede loevstroem Nybegynder
09. februar 2009 - 16:21 Der er 6 kommentarer og
1 løsning

Preg match æøå

Hej Eksperter!

Jeg har en funktion som finder nogle key words ud fra en sætning. Mit problem er at skulle keywords den finder være "århus, københavn" returnere funktionen "rhus, kbenhavn" - altså æøå virker ikke..

Nogle forslag til hvordan jeg kan få den til at virke med æ ø å?

På forhånd tak



class keyWords {

    public function extractKeywords($content,$minLenght,$headingWeight,$linksWeight,$numberOfKeywords){
    // minimum lenght a keyword must have
    $keywordArray = array();
   
    //Count the link keywords
    $links = array();
    preg_match_all('#<a.*?>(.*?)</a.*?>#s',$content,$links);       
    foreach($links[1] as $key =>$value){
        $keywords = explode(' ',strip_tags($value));
        foreach($keywords as $id => $keyword){
            // Get the alpha numeric value for the keyword
            $keyword = preg_replace('/[^[:alpha:]]/', '', $keyword);
            if(strlen($keyword) >= $minLenght){
                if(!array_key_exists($keyword,$keywordArray)){
                    $keywordArray[$keyword] = $linksWeight;
                }
                else{
                    $keywordArray[$keyword] += $linksWeight;
                }
            }
        }
    }
    //Count the heading keywords
    $headings = array();
    preg_match_all('#<h(.*?)>(.*?)</h.*?>#s',$content,$headings);
    foreach($headings[2] as $key =>$value){
        $keywords = explode(' ',strip_tags($value));
        foreach($keywords as $id => $keyword){
            // Get the alpha numeric value for the keyword
            $keyword = preg_replace('/[^[:alpha:]]/', '', $keyword);           
            if(strlen($keyword) >= $minLenght){
                $divider = (int)$headings[1][$key];
                if($headingNumber == 0)$headingNumber = 1;
                if(!array_key_exists($keyword,$keywordArray)){
                    $keywordArray[$keyword] = $headingWeight/$headingNumber;
                }
                else{
                    $keywordArray[$keyword] += $headingWeight/$headingNumber;
                }
            }
        }
    }
   
    // Count the text keywords including the heading and link texts!
    // Meaning these are counted double once with a rating of 1 and once with the rating set for them!
    $text = str_ireplace(array('/',"\n",'<br />','<br/>'),' ',$content);
    $text = strip_tags($text);
    $keywords = explode(' ',$text);
    foreach($keywords as $key => $keyword){
        // Get the alpha numeric value for the keyword
        $keyword = preg_replace('/[^[:alpha:]]/', '', $keyword);
        if(strlen($keyword) >= $minLenght){
            if(!array_key_exists($keyword,$keywordArray)){
                $keywordArray[$keyword] = 1;
            }
            else{
                $keywordArray[$keyword] += 1;
            }
        }
    }
    // Sort the keywords
    arsort($keywordArray);
   
    // Take only the number of keywords set in the config
    $keywordArray = array_slice($keywordArray,0,$numberOfKeywords);
    return strtolower(implode(', ',array_keys($keywordArray)));
    }

}
Avatar billede olebole Juniormester
09. februar 2009 - 20:56 #1
<ole>

Du skal bruge det samme tegnsæt _overalt_ - f.eks. utf-8.

*) Du skal bruge en utf-8 meta i alle dine dokumenter.
*) Dine dokumenter skal være gemt som utf-8
*) Din DB skal være sat til utf-8 - også dens tabellers collationer
*) Din DB's indhold skal være utf-8 indhold
*) Din server skal sende dine dokumenter som utf-8

Så får du næppe problemer med specialtegn  ;o)

/mvh
</bole>
Avatar billede olebole Juniormester
09. februar 2009 - 20:57 #2
*) Du skal bruge en utf-8 meta i alle dine dokumenter.

- burde nok have været:

*) Du skal bruge en utf-8 meta i alle dine HTML-dokumenter (også selvom de hedder *.php)
Avatar billede loevstroem Nybegynder
09. februar 2009 - 21:44 #3
Hej Ole!

Alle dine listede punkter er allerede opfyldt :-)

Kan det være [:alpha:] der ikke indeholder Æ Ø Å?
Avatar billede olebole Juniormester
09. februar 2009 - 22:58 #4
Ahhh ... den havde jeg overset! Ja, den dækker kun A-Z - upper eller lower. Prøv i stedet:
    $keyword = preg_replace('/[^[a-zæøå]]/i', '', $keyword);
Avatar billede loevstroem Nybegynder
10. februar 2009 - 00:03 #5
Hej Ole! Ja så funker det pludselig meget bedre, nu fanger den dog også , eller . - det var ikke meningen :- ) Er der også et fix imod det?

Og smid et svar :- )

Mange tak
Avatar billede olebole Juniormester
10. februar 2009 - 09:20 #6
Dækker dette, hvad du har brug for:
    $keyword = preg_replace('/\W/i', '', $keyword);
Avatar billede loevstroem Nybegynder
10. februar 2009 - 11:27 #7
Hej Ole. Det ser ud som at W igen ikke indeholder Æ Ø Å
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