Programm, das keyword in den ersten 100 Wörtern einer Website überprüft

tina33333

Mitglied
Liebes Forum,

wie stelle ich es an, dass mein Programm nur die ersten 100 Wörter auf das Vorkommen von keywords überprüft? Bin nur so weit gekommen:

<?php
$url="http://www.sporta-huette.at";
$keywords="selbstversorgerh&uuml;tte";

$quelltext = file_get_contents($url);
#echo strlen($quelltext);
if (preg_match ("/$keywords/i",$quelltext)) {
echo "Das Keyword $keywords ist in den ersten 100 W&ouml;rtern enthalten";
}
else {
echo "Das Keyword $keywords scheint in den ersten 100 W&ouml;rtern nicht auf";
}
?>

Wäre über Lösungsvorschläge sehr dankbar.
Liebe Grüße
Tina
 
Du kannst einen String zerlegen mit z.B. explode()
http://php.net/manual/de/function.explode.php
Du erhältst ein Array mit den einzelnen Worten und kannst mit einer Schleife die ersten 100 davon überprüfen.
Mit substr-count() kannst du zählen, wie oft eine Zeichenkette in einem String vorkommt und dabei die Länge einstellen die durchsucht wird. Geht zwar nach Zeichen, nicht nach Worten aber du kannst 100*X als Schätzwert ansetzen, wobei x die durchschnittliche Zeichenzahl eine Wortes darstellt.
http://www.php.net/manual/de/function.substr-count.php
 
PHP:
<?php
$url="http://www.sporta-huette.at";
$keywords="selbstversorgerh&uuml;tte";

$quelltext = file_get_contents($url);
#echo strlen($quelltext);
$first100words = explode(" ", $quelltext, 101); // Das 101 element enthält den rest des Quelltextes
if (in_array($keyword, $first100words)) {
echo "Das Keyword $keywords ist in den ersten 100 W&ouml;rtern enthalten";
}
else {
echo "Das Keyword $keywords scheint in den ersten 100 W&ouml;rtern nicht auf";
}
?>

so müsste das ganze funktionieren.
 
Hi H4ckHunt3r,

sorry für die späte Antwort und herzlichen Dank für deinen Code. Ein kleines Problem gibt es dabei noch: Habe zur Kontrolle ein Keyword eingegeben, welches nicht in den ersten 100 Wörtern vorkommt z.B. "Boxenstopp". Leider teilt das Programm auch hier mit, dass dieses Wort im Text vorkommt. Vielleicht gibt´s da noch eine Lösung****
LG
Tina
 
Bist du sicher das es nicht geht. Habe eben den Code kopiert und getestet, bei mir hat es damit geklappt.

Lies mal genau was bei dir ausgegeben wird, nicht das du es nur verwechselst weil der Hinweistext fast gleich ist!
 
Hi tombe,

danke für die schnelle Antwort.
Habe den Code mehrfach und mit verschiedenen Keywords ausprobiert, aber das Ergebnis ist immer dasselbe. Ich habe kein Wort kreieren können, das er nicht als vorhandenes keyword erkennt.
 
Das Problem ist das es auf Webseiten nicht richtig funktioniert
wenn man ein leerzeichen als trennzeichen verwendet,
da man keine reinen Wörter bekommt.
Diese enthalten auch mal ein , oder ein > vom HTML
oder sind sogar mehrere wörter durch ein = o.Ä. zusammengesetzt.
Deshalb habe ich das ganze nun mal angepasst.

Hier der neue Code der funktionieren müsste,
auch wenn nicht unbedingt 100 Worte sondern
auch mal bis zu 200 Worte je nach Quellcode geprüft werden.
Es hängt davon ab wie die Wörter verkettet sind.

PHP:
 <?php
$url="http://www.sporta-huette.at";
$keywords="selbstversorgerh&uuml;tte";

$quelltext = file_get_contents($url);

$first100words = explode(" ", $quelltext, 101);
$first100words[100] = NULL;

/*
  Debug Ausgabe um zu sehen was in dem Array enthalten ist

echo '<pre>';
var_dump($first100words);
echo '</pre>';*/

$enthalten = false;
foreach($first100words as $value)
{
	if( eregi($keywords, $value) )
	{
		$enthalten = true;
	}
}

if ($enthalten)
{
	echo "Das Keyword $keywords ist in den ersten 100 W&ouml;rtern enthalten.";
}
else
{
	echo "Das Keyword $keywords scheint in den ersten 100 W&ouml;rtern nicht enthalten zu sein.";
}
?>
 
Guten Morgen H4ckHunt3r,

herzlichen Dank für das Programm, das jetzt fast richtig funktioniert.
Ein paar Sachen gäbe es da noch, vielleicht hast du auch da noch ein paar Tipps:

1. Es kommt die Fehlermeldung Deprecated: Function eregi() is deprecated in C:\xampp\htdocs\tina\85_forum2.php on line 23.

2. Wenn ich folgende Adresse eingebe: http://www.almhof-kirchberg.com und nach dem Keyword "Kitzbühel" suche, dann erkennt er dieses Keyword nicht. Ich nehme an, dass ich das irgendwo wieder ein utf8 oder so ähnlich einfügen muss, weiß aber nicht ob und wo.

Liebe Grüße
Tina
 
ü könnte auch als &uuml; im html-text stehen.
Lass dein Text durch html_entity_decode() rattern um &uuml; in ein ü zu verwandeln
 
Habe jetzt nochmal ein bischen gebastelt.
Aber seltsamerweise Funktioniert es egal wie ich es mache mit preg_match nicht.
Deshalb ist eregi noch drin.
Vielleicht kann da ja mal jemand anders gucken weshalb das nicht funktioniert.
Der findet das Suchwort nie und wenn ich die vergleichsweise ausgebe
sehen die sogar (im Quelltext) Identisch aus.


Mit eregi funktioniert das.
Um die deprecated Warnung zu unterdrücken habe ich jetzt ein @ vorangestellt.

PHP:
 <?php
 
// ERROR REPORTING

error_reporting(E_ALL|E_STRICT);
ini_set('display_errors', 1);


// EDITIER BEREICH

$url 		= "http://www.sporta-huette.at";		// zu durchsuchende Webseite
$keywords 	= "selbstversorgerh&uuml;tte";			// Suchwort
$metaTags 	= true;									// Meta Tags auch Prüfen?


// EDITIER BEREICH ENDE



// QUELLTEXT HOLEN

$quelltext = file_get_contents($url);
$enthalten = false;


// FILTERN DES QUELLTEXTES

$quelltext = preg_replace('/(<script[^>]*>.*?<\/script>|<style[^>]*>.*?<\/style>)/msi', '', $quelltext);
$quelltext = strip_tags($quelltext);
$quelltext = preg_replace('/(\n|\r|\t|\s|\.|\+|-|_)/msi', '{SPLIT}', $quelltext);
while(preg_match('/\{SPLIT\}\{SPLIT\}/msi', $quelltext))
	$quelltext = preg_replace('/\{SPLIT\}\{SPLIT\}/msi','{SPLIT}', $quelltext);


// HOLEN & PRÜFEN DER META TAGS

if($metaTags)
{
	$tags = get_meta_tags($url);
	
	$enthalten = @eregi($keywords, $tags['keywords']);
	if(!$enthalten) $enthalten = @eregi($keywords, $tags['description']);
}




// AUFTEILEB DES QUELLTEXTES IN EINZELNE WÖRTER
	
$first100words = explode("{SPLIT}", $quelltext, 101);
$first100words[100] = NULL;

/*
  Debug Ausgabe um zu sehen was in dem Array enthalten ist
*/
/*echo '<pre>';
var_dump($first100words);
echo '</pre>';
*/



// PRÜFEN DER WÖRTER
if(!$enthalten)
{
	foreach($first100words as $value)
	{
	    if( @eregi($keywords, $value) || @eregi( html_entity_decode($keywords) , $value) )
	    {
	        $enthalten = true;
	    }
	}
}



// RESULTAT AUSGABE

if ($enthalten)
{
    echo "Das Keyword $keywords ist in den ersten 100 W&ouml;rtern enthalten.";
}
else
{
    echo "Das Keyword $keywords scheint in den ersten 100 W&ouml;rtern nicht enthalten zu sein.";
}
?>
 
Zurück