[FUNCTION] Een functie om keywords te genereren...
Het kan gewoon tekst zijn, maar het kan ook met een hele html-structuur.
Keywords worden alfabetisch getoond.
Code (php)
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
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;
}
?>
/**************************************************\
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:
Terug gekregen waarde:
Code (php)
1
2
3
2
3
$mykeywords['text'] => html, stuk, tekst
$mykeywords['length'] => 17
$mykeywords['words'] => 3
$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 :)
Als ik een stuk tekst schrijf wil ik woorden als 'ik' en 'de' en 'en' en enzovoort er niet in hebben natuurlijk.
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.
@Obelix: Voor sommigen kan "vier" en "maand" wel een keyword zijn.
Quote:
Dat is ook zo, je gebruikt het (of gebruikt het niet) zoals je het zelf wilt he :)Het is meer een functie om alle woorden die op een pagina voorkomen alfabetisch te tonen, waarbij elk woord 1x voorkomt.
Gewijzigd op 18/05/2012 15:38:31 door G P
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?!
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.
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!
Code (php)
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
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;
}
?>
/**************************************************\
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)
OUTPUT:
Code (php)
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
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
)
)
(
[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
)
)
Waar zijn die 25 en 250 voor? Die wordt in de functie erboven niet gebruikt.
Zie:
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
Eddy Erkelens op 19/05/2012 09:39:09:
Oeps... Dat is een foutje van mij, komt nog van een vorige test.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.
Waar zijn die 25 en 250 voor? Die wordt in de functie erboven niet gebruikt.
Eddy Erkelens op 19/05/2012 09:39:09:
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.Daarnaast is key/val als keyword niet handig.
Logischer zou zijn "keyword" en "count" oid.
Logischer zou zijn "keyword" en "count" oid.
keywords.generator.php
Code (php)
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
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;
}
}
?>
/**************************************************\
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)
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
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>';
?>
// 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>';
?>
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)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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);
?>
# 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 -