• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

automatische Metatagerstellung

Hier ist erstmal der Code des Metatagscriptes:

PHP:
<?php

$mtext = strip_tags ($mtext);
$mtext = str_replace ( ".", "", $mtext );
$mtext = str_replace ( ":", "", $mtext );
$mtext = str_replace ( ",", "", $mtext );
$mtext = str_replace ( ";", "", $mtext );
$mtext = str_replace ( "!", "", $mtext );
$mtext = str_replace ( "?", "", $mtext );
$mtext = str_replace ( "²", "", $mtext );
$mtext = str_replace ( "&", "", $mtext );

$meta = explode ( " ", $mtext);
sort ( $meta );

$anz_woerter = count ( $meta );
$pos = 0;

$badwords = array ( "der", "die", "das", "wie", "wo", "wann", "ein", "all", "alle",
"alles", "dein", "den", "eine", "hin", "ist", "mit", "viel", "mehr",
"wenig", "hier", "ihre", "seine", "sein", "werden", "war", "wird",
"will", "muss", "müssen", "können", "kann", "könnte", "deine",
"fein", "feine", "finden", "findet", "gefunden", "kommen", "kam",
"von", "co", "seinen", "wer", "was", "als", "ich", "du", "er", "sie",
"es", "wir", "ihr", "und", "oder", "aber", "zu", "zum", "zur");

while ( $pos != $anz_woerter )
{
	$add = TRUE;
	if ( $meta[$pos] != "" )
	{
		for ( $i = 0; $i < count ( $badwords ); $i++ )
		{
			if ( strtolower ( $badwords[$i] ) == strtolower ( $meta[$pos] ) )
			{
				$add = FALSE;
			}
		}
		if ( $meta[$pos] != $meta[$pos-1] && $add == TRUE )
		{
			$keys[wort][] = $meta[$pos];
			$keys[zahl][] = 1;
		} else if ( $add == TRUE )
		{
			$keys[zahl][count($keys[zahl])-1]++;
		}
	}
	$pos++;
}

@array_multisort ( $keys[zahl], SORT_DESC, $keys[wort]);

for ( $i = 0; $i < count ( $keys[wort] ); $i++ )
{
	$key.= $keys[wort][$i];
	if ( $i < count ( $keys[wort] ) - 1 )
		$key.= ", ";
}
$key = substr($key,0,1000);
?>

Also:

Als erstes werden mal Standartzeichen entfernt um wirklich jedes Wort mitzunehmen. Da es sich nur um Text handelt muss kein strip_tags ausgeführt werden. --> dazu kommt dann gleich noch ne Frage!

Als nächstes wird der Text mittels explode getrennt, so dass einzelne Wörter im Array stehen, dieser wird noch sortiert, damit gleiche Wörter hinterinander stehen.

Eine Badwordliste gibt es auch, die Standartbegriffe filtert (muss noch erweitert werden)

Dann wird jedes einzelne Wort geprüft ob es in der Badwordliste steht und ob es im Array schonmal vorkommt, wenn ja wird einfach die Anzahl um eins erhöht, ansonsten wird es in einen neuen Array geschrieben.

Jetzt haben wir schon mal keine Dopplungen mehr. Der Array wird sortiert und dann wird eine Keywordliste getrennt noch Komma erstellt und die Keywords auf 1000 Zeichen reduziert.

Fertig.

Habt Ihr noch Verbesserungsvorschläge, was Performance und Länge des Codes betrifft und die nächste Frage wäre gleich noch wie kann man alle HTML Tags entfernen und ein Leerzeichen einfügen, denn mit der Standartfunktion werden die Tags entfernt und dadurch stehen dann die Wörter, gerade bei Tabellen ohne Leerzeichen aneinander da und können nicht korrekt verarbeitet werden.

Gruß
Melzi
 
Zuletzt bearbeitet:
sodele, hab mal einen zeilenumbruch in deine badword-liste eingebaut. ist lesbarer.
wegen dem "zoff" von damals: von mir aus ist das schon lange vergeben und vergessen. ich wusst´s nich mal mehr..
keep on posting,
mo
 
Wenn du einfach das & n b s p ; in die Badwordliste einfügst?

Finde das übrigens schon mehr als einen gelungenen Ansatz :)

Eine Frage noch, was nimmst du als zu überprüfenden Text der Seite? Alles zwischen<body> und </body>?
 
Im Moment weise ich den Text direkt aus der DB zu, damit wird aber nicht alles vom Text und damit auch nicht die ersten 200 Zeichen vom Body gelesen.

Ich habe eine normale Variable namens $text, diese beinhaltet den gesamten Inhalt in Tabellen gefasst. Im Endeffekt der gesamte Bodyteil. Diesen $text will ich eigentlich nehmen, ich muss nur strip_tags ausführen damit die HTML Tags entfernt werden. Dann habe ich allerdings das Problem, dass zum Beispiel aus:

<tr>
<td>
Test
</td>
<td>
Ich will endlich meine Metatags
</td>
</tr>

ungefähr:
TestIch will endlich meine Metatags

Das Leerzeichen zwischen Test und Ich muss ich irgendwie erstellen, ich hab mir die Doku von PHP angeschaut und auch dort nichts gefunden. Es muss doch eine Möglichkeit geben HTML Tags durch Leerzeichen zu ersetzten.

Please Help
Gruß
Melzi
 
Hast du es mal mit einer preg )Perl regular expression) probiert?

Müsste ungefähr so gehen:

$pattern = "s/<[^>]+>//g";
$replace = " ";
$m_text = preg_replace($pattern,$replace ,$text);

Den Bereich $pattern habe ich direkt aus Perl genommen, kann Dir nicht versprechen, das es funktioniert, aber einen Versuch ist es wert ;)
 
Zurück
Oben