[FUNCTION] Een functie om keywords te genereren...

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

G P

G P

18/05/2012 15:02:30
Quote Anchor link
Dit zorgt ervoor om enkele keywords te maken van de ingegeven tekst.
Het kan gewoon tekst zijn, maar het kan ook met een hele html-structuur.
Keywords worden alfabetisch getoond.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
<?php

/**************************************************\
    TEKST OMZETTEN NAAR KEYWORDS
\**************************************************/

function keywords($str_text = NULL, $str_min_word_length = '3', $str_max_words = '25', $str_max_total_length = '255'){
    // Verwijder ALLE html tags
    $str_text = strip_tags($str_text);
    // Alles in kleine letters
    $str_text = strtolower($str_text);
    // Alleen woorden met a tot z toelaten
    $str_text = preg_replace('~[^a-z]+~', ' ', $str_text);
    // Keywoords zijn langer dan ingegeven waarde
    $exp = explode(' ', $str_text);
    $str_text = '';
    $i = '0';
    $keywords = array();
    sort($exp);
    foreach($exp as $check){
        if (strlen($check) >= $str_min_word_length){
            $keywords[$i] = $check;
            $i++;
            if ($i > $str_max_words){ break; }
        }
    }

    // Keywords 1 voor 1 controleren
    $seperate = '';
    $count_words = '0';
    foreach($keywords as $check){
        if (strpos($str_text, $check) === false){
            if (strlen($str_text.$seperate.$check) < $str_max_total_length){
                $str_text .= $seperate.$check;
                $count_words++;
                $seperate = ', ';
            }
else {
                break;
            }
        }
    }

    // Gegenereerde keywords terugkaatsen met alle gegevens
    $return_text = array();
    $return_text['length'] = strlen($str_text);
    $return_text['words'] = $count_words;
    $return_text['text'] = strlen($str_text) > '0' ? $str_text : NULL;
    ksort($return_text);
    return $return_text;
}


?>

Voorbeeld:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
$mykeywords = keywords('stuk html tekst');

Terug gekregen waarde:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
$mykeywords['text'] => html, stuk, tekst
$mykeywords['length'] => 17
$mykeywords['words'] => 3


Extra uitleg:
Keywords maken
keywords($str_text = NULL, $str_min_word_length = '3', $str_max_words = '25', $str_max_total_length = '255');
$str_tekst: Dit is de tekst waar de keywords moet uit gehaals worden.
$str_min_word_length: Het minimum aantal letters dat elke keyword moet zijn. (Standaard heeft elk woord minimum 3 letters)
$str_max_words: Maximum aantal woorden in de keywords (Standaard 25 woorden)
$str_max_total_length: Maximum aantal letters in de keywords (Standaard 255 letters)

Keywords terug sturen
$mykeywords['text']: Dit zijn de keywords
$mykeywords['length']: Lengte van alle letters (Inclusief de komma en spatie mee geteld)
$mykeywords['words']: Aantal woorden in keywords die terug gestuurd worden.

Commentaar is welkom, zowel negatief als POSITIEF :)
 
PHP hulp

PHP hulp

01/12/2024 10:05:26
 
Eddy E

Eddy E

18/05/2012 15:26:11
Quote Anchor link
Worden veelgebruikte woorden er ook uit gefilterd?

Als ik een stuk tekst schrijf wil ik woorden als 'ik' en 'de' en 'en' en enzovoort er niet in hebben natuurlijk.
 
Obelix Idefix

Obelix Idefix

18/05/2012 15:27:10
Quote Anchor link
En wat kan ik hier dan mee?

Als ik een hele tekst laat 'analyseren' krijg ik terug het aantal en alle losse woorden (uniek/1 maal). Niet bv hoe vaak een woord voorkomt.
En is het woord vier of maand nou echt een keyword (keyword: 2. A significant or descriptive word)?

Het is meer een functie om alle woorden die op een pagina voorkomen alfabetisch te tonen, waarbij elk woord 1x voorkomt. Maar daarmee is het nog geen keyword genereren.
 
G P

G P

18/05/2012 15:33:09
Quote Anchor link
@Eddy: Stel minimum lengte in van 3 letters (Kan later, als ik veel zin heb, wel proberen om die woorden te filteren)
@Obelix: Voor sommigen kan "vier" en "maand" wel een keyword zijn.
Quote:
Het is meer een functie om alle woorden die op een pagina voorkomen alfabetisch te tonen, waarbij elk woord 1x voorkomt.
Dat is ook zo, je gebruikt het (of gebruikt het niet) zoals je het zelf wilt he :)
Gewijzigd op 18/05/2012 15:38:31 door G P
 
Obelix Idefix

Obelix Idefix

18/05/2012 15:40:33
Quote Anchor link
Maar wat is de (toegevoegde) waarde er dan van? Alleen een lijstje met alle woorden?
Wil het een (kleine) meerwaarde hebben: toon dan in ieder geval hoe vaak een woord voorkomt en filter, zoals Eddy aangeeft, bepaalde woorden er uit.

Gunther Peeters op 18/05/2012 15:33:09:
(Kan later, als ik veel zin heb, wel proberen om die woorden te filteren)

Jammer. je plaatst hier een script en vraagt om reacties, maar hebt geen zin om er wat mee te doen?!
 
G P

G P

18/05/2012 15:50:17
Quote Anchor link
Om alles te willen moet er een class van gemaakt worden, in 1 enkele functie zie ik het niet meteen zitten.
Ik zal, als ik er tijd voor heb, mij er eens deftig aan wagen. En natuurlijk zal ik het script ook posten. Maar je gaat het niet vandaag moeten verwachten natuurlijk.
 
Eddy E

Eddy E

18/05/2012 19:36:50
Quote Anchor link
Inderdaad even aangeven hoe vaak het woord voorkomt.
En dat je bijvoorbeeld een (lange) lijst met 3000 meestgebruikte woorden eruit filtert.
En daarna de woorden die vaker voorkomen in als een tag behandelen.

Kijk ook een naar de PHPBB3-indexering. Daar zit ook zoiets in en dat werkt best aardig.

Nadeel: een woord wat maar 1 of 2 keer voorkomt kan prima kernwoord zijn!
 
G P

G P

18/05/2012 22:32:28
Quote Anchor link
Kleine update
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
<?php

/**************************************************\
    TEKST OMZETTEN NAAR KEYWORDS
\**************************************************/

function keywords($str_text = NULL, $str_min_word_length = '3'){
    // Verwijder ALLE html tags
    $str_text = strip_tags($str_text);
    // Alles in kleine letters
    $str_text = strtolower($str_text);
    // Alleen woorden met a tot z toelaten
    $str_text = preg_replace('~[^a-z]+~', ' ', $str_text);
    // Sorteer meest voorkomende woorden van hoog naar laag
    $exp = explode(' ', $str_text);
    $str_text = '';
    sort($exp);
    $total_word = array();
    foreach($exp as $check){
        $total_word[$check] = isset($total_word[$check]) ? $total_word[$check]+'1' : '1';
    }

    arsort($total_word);
    $i = '0';
    $keywords = array();
    foreach($total_word as $key => $val){
        if (strlen($key) >= $str_min_word_length){
            $keywords[$i]['key'] = $key;
            $keywords[$i]['val'] = $val;
            $i++;
            if ($i > $str_max_words){ break; }
        }
    }

    return $keywords;
}


?>


Terug gegeven waarde zijn nu de keywords + het aantal keren dat het woord voorkomt.

Voorbeeld:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
$mykeywords
= keywords('Dit, is is is een en test. testje Laat dit is testen test', '1', '25', '250');

print '<pre>';
print_r($mykeywords);
print '</pre>';
?>


OUTPUT:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
Array
(
    [0] => Array
        (
            [key] => is
            [val] => 4
        )

    [1] => Array
        (
            [key] => dit
            [val] => 2
        )

    [2] => Array
        (
            [key] => test
            [val] => 2
        )

    [3] => Array
        (
            [key] => testen
            [val] => 1
        )

    [4] => Array
        (
            [key] => testje
            [val] => 1
        )

    [5] => Array
        (
            [key] => laat
            [val] => 1
        )

    [6] => Array
        (
            [key] => en
            [val] => 1
        )

    [7] => Array
        (
            [key] => een
            [val] => 1
        )

)
 
Eddy E

Eddy E

19/05/2012 09:39:09
Quote Anchor link
Bij je aanroep geef je een $string, 1, 25 en 250 door.
Waar zijn die 25 en 250 voor? Die wordt in de functie erboven niet gebruikt.

Zie:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$mykeywords
= keywords('Dit ... test', '1', '25', '250');
?>


Kortom, wat is de goede code?
Daarnaast is key/val als keyword niet handig.
Logischer zou zijn "keyword" en "count" oid.
Gewijzigd op 19/05/2012 09:47:07 door Eddy E
 
G P

G P

19/05/2012 15:03:15
Quote Anchor link
Eddy Erkelens op 19/05/2012 09:39:09:
Bij je aanroep geef je een $string, 1, 25 en 250 door.
Waar zijn die 25 en 250 voor? Die wordt in de functie erboven niet gebruikt.
Oeps... Dat is een foutje van mij, komt nog van een vorige test.
Eddy Erkelens op 19/05/2012 09:39:09:
Daarnaast is key/val als keyword niet handig.
Logischer zou zijn "keyword" en "count" oid.
Dat is simpel aan te passen, het 2de geeft enkel de meest voorkomende keywords terug. De 1ste geeft het aantal keywords terug in alfabetische volgorde.
 
G P

G P

24/05/2012 18:39:22
Quote Anchor link
Kleine update: (Er kan nog wel veel aangepast worden, maar het is al een begin)
keywords.generator.php
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
<?php

/**************************************************\
    KEYWORD GENERATOR
\**************************************************/

class generate_keyword {
    function
__construct($str_text = NULL){
        $str_text = strtolower($str_text);
        $str_text = strip_tags($str_text);
        $str_text = preg_replace('/\s\s+/', ' ', $str_text);
        $this->original = strip_tags($str_text);
    }


    // WOORDEN DIE NIET MOGEN MEE GETELD IN DE TEKST
    public function ignore($words) {
        $explode = array_map('trim', explode(',', $words));
        $this->ignore_words = isset($this->ignore_words) ? $this->ignore_words : array();
        $i = count($this->ignore_words);
        foreach($explode as $ignore_word){
            $ignore_word = strtolower($ignore_word);
            $ignore_word = preg_replace('/\s\s+/', ' ', $ignore_word);
            $this->ignore_words[$i] = $ignore_word;
            $i++;
        }
    }


    // WOORDEN DIE WEL MOETEN GETELD WORDEN IN DE TEKST
    public function add($words){
        $explode = array_map('trim', explode(',', $words));
        $this->add_words = isset($this->add_words) ? $this->add_words : array();
        $i = count($this->add_words);
        foreach($explode as $add_word){
            $add_word = strtolower($add_word);
            $add_word = preg_replace('/\s\s+/', ' ', $add_word);
            $this->add_words[$i] = $add_word;
            $i++;
        }
    }


    // GENERATE KEYWORDS
    public function keywords($str_min_word_length = '1', $str_max_words = '1000') {
        if ($str_min_word_length < '1') { $str_min_word_length = '1'; }
        if ($str_max_words < '1') { $str_max_words = '1'; }
        $str_text = $this->original;
        // Speciale karakters omzetten naar leesbare taal (UTF-8) ü => u, é => e, enz...
        $str_text = preg_replace("/&([a-z])[a-z0-9]{3,};/i", "\\1", $str_text);
        $str_text = html_entity_decode($str_text);
        // Alleen woorden met a tot z toelaten
        $str_text = preg_replace('~[^a-z]+~', ' ', $str_text);
        // Meerder spaties omzetten naar 1 spatie
        $str_text = preg_replace('/\s\s+/', ' ', $str_text);
        // Sorteer meest voorkomende woorden van hoog naar laag
        $exp = explode(' ', $str_text);
        $str_text = '';
        sort($exp);
        $total_word = array();
        foreach($exp as $check){
            $total_word[$check] = isset($total_word[$check]) ? $total_word[$check]+'1' : '1';
        }

        // VERWIJDER DE KEYWORDS DIE NIET MOGEN MEE GETELD WORDEN
        foreach ($this->ignore_words as $delete){
            unset($total_word[$delete]);
        }

        // EXTRA KEYWORDS BIJ VOEGEN
        foreach ($this->add_words as $add){
            $total_word[$add] = isset($total_word[$add]) ? $total_word[$add]+'1' : '1';
        }

        // WOORDEN ALFABETISCH SORTEREN
        arsort($total_word);
        $i = '1';
        $keywords = array();
        foreach($total_word as $key => $val){
            if (strlen($key) >= $str_min_word_length){
                $keywords[$i]['keyword'] = $key;
                $keywords[$i]['count'] = $val;
                $i++;
                if ($i > $str_max_words){ break; }
            }
        }

        sort($keywords);
        $this->keywords = $keywords;
    }
}


?>

index.php
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
<?php

// PAGINA OPHALEN ANDERS WERKT DE CLASS NIET... DUH!
require_once('keywords.generator.php');

// DIT IS DE TEKST WAARVAN DE KEYWORDS MOETEN GEVONDEN WORDEN
$text = '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Keywords Generator Test 2.0</title>
</head>

<body>
<h1>Keywords Generator</h1>
<p>Een kleine test om keywords te maken van een ingegeven tekst.<br />Het is niet verplicht, je kan ook apart keywords toevoegen.<br />De generator heeft ook de mogelijkheid om bepaalde keywords te negeren.</p>
</body>
</html>'
;

// START GENERATOR
$mykey = new generate_keyword($text);

// DEZE WOORDEN WIL IK NIET
$mykey->ignore('een, om, te, van');
$mykey->ignore('is');

// DEZE WOORDEN WIL IK WEL
$mykey->add('extra, keywords, toevoegen');
$mykey->add('phphulp');

// TOON MIJ DE KEYWORDS
$mykey->keywords();

// ALLES NETJES TONEN
print '<pre>';
print_r($mykey);
print '</pre>';

// TOON MIJ DE KEYWORDS WAARVAN DE WOORDEN LANGER ZIJN DAN 5 TEKENS MET EEN MAXIMUM VAN 3 WOORDEN
$mykey->keywords('5', '3');

// ALLES NETJES TONEN
print '<pre>';
print_r($mykey);
print '</pre>';

?>
 
- Mark -

- Mark -

24/05/2012 21:07:06
Quote Anchor link
Ik heb hem nog niet helemaal na gelopen door tijd gebrek. OO is nog niet echt mijn ding dus daar kan ik je helaas niet mee helpen.

Er zijn wel een aantal dingen die me opvielen.

1. Waarom voeg je de woorden die je wel of niet wilt toe als een string en niet direct als een array? Nu moet je ze eerst in stukjes opblazen en dat is eigenlijk niet nodig.

2. getallen horen niet tussen quotes.

3. Van $this->ignore_words[$i] = $ignore_word; kun je net zo goed $this->ignore_words[] = $ignore_word; van maken. Er zal dan automatich een key worden aangemaakt. Ik zag je dit nog op een paar plaatsen doen, nergens voor nodig.

4. Ik snap je volgorde niet echt. Als je eerst de woorden toevoegd die je wel wilt dan hoef je ze niet appart te tellen. Kijk ook eens naar de functies die ik gebruik. Ze zijn uit het hoofd dus ik kan me vergissen maar het zou zo ook moeten werken. Die foreach lussen zijn dus niet nodig.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php    

    # De te negeren keywords van de lijst met mogelijke keywords halen.
    
        $exp = array_diff($exp, $this->ignore_words);


    # De lijst met keywords die we er zeker in willen hebben toevoegen aan de lijst met mogelijke keywords.
    
        $exp = array_merge($exp, $this->add_words);    
    
    
    # Dan gaan we nu tellen hoevaak elk woord voorkomt in de tekst.
    
        $total_word = array_count_values($exp);

?>
Gewijzigd op 24/05/2012 21:08:27 door - Mark -
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.