CronJob-Service
bei SELFPHP mit ...
|
+ minütlichen Aufrufen
+ eigenem Crontab Eintrag
+ unbegrenzten CronJobs
+ Statistiken
+ Beispielaufrufen
+ Control-Bereich
Führen Sie mit den CronJobs von
SELFPHP zeitgesteuert Programme
auf Ihrem Server
aus. Weitere Infos
|
:: Anbieterverzeichnis ::
Globale Branchen
Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP
:: Newsletter ::
Abonnieren Sie hier den kostenlosen
SELFPHP Newsletter!
|
PHP für Fortgeschrittene und Experten Fortgeschrittene und Experten können hier über ihre Probleme und Bedenken talken |
09.06.2009, 13:32:57
|
Anfänger
|
|
Registriert seit: Jun 2009
Alter: 54
Beiträge: 6
|
|
Keywords filtern
Hallo PHP-Gemeinde,
also ich bin auf der Suche nach einer Möglichkeit, um die wichtigsten/häufigsten Worte eines Textes - also die wahrscheinlichsten Suchstichworte - zu bestimmen. Damit möchte ich die Relevanz eines Textes bei der Suche bestimmen und die Reihung dementsprechend beeinflussen.
Hat in diesem Bereich schon jemand Erfahrung gesammelt, oder einen praktischen Lösungsansatz?
Im moment durchsuche ich die eingegebenen Texte mit einem Regulären Ausdruck und speichere alle Worte die mit Grossbuchstaben beginnen und mindestens 4 darauffolgende Buchstaben aufweisen. So habe ich eine ansehnliche Stichworttabelle. Natürlich kommt jedes Stichwort nur einmal vor, und dient für das Autocomplete bei der Suchworteingabe.
LG, Hystyria
Nachtrag:
Das Problem ist gelöst. Hab jetzt die Suchfunktion mit MATCH/AGAINST erstellt und das ist genau das was ich wollte.
Kann doch so einfach sein wenn man mal ein bisschen sucht.
Trotzdem ein herzliches Dankeschön an die Betreiber dieser Seite.
Geändert von hystyria (09.06.2009 um 23:12:38 Uhr)
|
10.06.2009, 10:40:03
|
SELFPHP Profi
|
|
Registriert seit: Apr 2008
Alter: 48
Beiträge: 1.938
|
|
AW: Keywords filtern
hallo, ein paar anmerkungen meinerseits:
Zitat:
Zitat von hystyria
Damit möchte ich die Relevanz eines Textes bei der Suche bestimmen und die Reihung dementsprechend beeinflussen.
|
die häufigkeit eines wortes in einem text sagt nichts über die semantik des textes / die relevanz als suchergebnis aus. es ist lediglich ein indiz und ganz sicher von der art des textes (wissenschaftlich, newsletter etc.) abhängig.
Zitat:
Zitat von hystyria
Hat in diesem Bereich schon jemand Erfahrung gesammelt, oder einen praktischen Lösungsansatz?
|
intelligente suchalgorithmen sind keine leichte angelegenheit. ich glaube nicht, dass man sowas allein durch die brille der programmierung betrachtet kann.
Zitat:
Zitat von hystyria
Im moment durchsuche ich die eingegebenen Texte mit einem Regulären Ausdruck und speichere alle Worte die mit Grossbuchstaben beginnen und mindestens 4 darauffolgende Buchstaben aufweisen.
|
klingt brauchbar - wenn das für dich gut funktioniert und halbwegs performent ist, sollte es doch in ordnung sein, nicht wahr?
Zitat:
Zitat von hystyria
Hab jetzt die Suchfunktion mit MATCH/AGAINST erstellt und das ist genau das was ich wollte.
|
anmerkung: eine abfrage mit MATCH / AGAINST berücksichtigt nur ganze worte (volltextsuche). wenn du teile eines wortes finden willst, musst du eine abfrage mit LIKE - ggfs. in kombination mit dem platzhalterzeichen % - in erwägung ziehen.
cx
|
10.06.2009, 23:46:22
|
Anfänger
|
|
Registriert seit: Jun 2009
Alter: 54
Beiträge: 6
|
|
AW: Keywords filtern
Hallo Cortex!
Herzlichen Dank für deine Kommentare. Dachte schon meine Anliegen würde niemanden interessieren *g*.
Es ist mir natürlich klar, dass man mit MATCH/AGAINST nur ganze Worte suchen/finden kann, aber das erfüllt in meinem Fall auf jeden Fall den Zweck.
Habe jetzt folgende Lösung gefunden und fertiggestellt (bin ganz zufrieden damit):
Ich habe eine Tabelle in der alle relevanten Datensätze gespeichert sind (ID, TITEL, TEXT, usw.)
Die Felder TITEL und TEXT sind mit einem INDEX versehen.
Mit Hilfe von MATCH/AGAINST wird nach den eingegeben Stichworten gesucht und nach Relevanz gereiht.
Die so gewonnenen Datensätze werden dann noch dahingehend bearbeitet, dass die verschiedenen Suchstichworte farblich hervorgehoben werden.
Angezeigt wird der TITEL und ein Teil des TEXTES wo eben das/die Stichworte drinnen sind ... like Google.
Weiters werden aus einer Keywordtabelle mittels Soundex Wörter herausgezogen die zu den eingegebenen Suchstichwörten passen ... like "Meinten Sie vielleicht ... " ... angezeigt und verlinkt.
In weiterer Folge, also wärend der Laufzeit, werde ich noch die eingegebenen Suchmuster (jene mit Erfolgsquote) in eine eigene Tabelle mitspeichern, und in Verbindung mit der Keywordtabelle ein Autocomplete an das Suchtextfeld binden.
Damit hab ich so ziemlich alles abgedeckt was ich wollte. Ist natürlich nicht mit Google zu vergleichen, aber immerhin im kleinen Anwendungsfall recht ähnlich und die Suchergebnisse sind sehr gut.
In diesem Sinne wünsche ich einen schönen Abend.
LG, Hystyria
Geändert von hystyria (10.06.2009 um 23:48:51 Uhr)
|
11.06.2009, 09:15:07
|
SELFPHP Profi
|
|
Registriert seit: Apr 2008
Alter: 48
Beiträge: 1.938
|
|
AW: Keywords filtern
hallo hystyria,
soundex... hm. ich habe bessere erfahrungen |* mit metaphone gemacht; die funktion arbeitet genauer und - mein persönlicher eindruck - nachvollziehbarer.
|* programmierung einer suchfunktion für (deutsche) strassennamen.
bei einer suche nach ähnlich klingenden ausdrücken könnte man zwei ausdrücke auch noch mittels levenshtein vergleichen, um den radius der ähnlichkeit einzuschränken. dabei kann ein primitiver stringvergleich wie strlen zur plausibilitätsprüfung verwendet werden, da soundex / metaphone ähnlichkeiten berechnen, die ein mensch weder klanglich, noch optisch feststellen würde. dies liegt sicher auch daran, dass beide funktionen für die englische sprache ausgelegt sind.
habe mal ein skript im netz gefunden, das die kölner phonetik implementierte - die ergebnisse waren dennoch eher enttäuschend. spracherkennung ist und bleibt ein schwieriges unterfangen .-
cx
|
14.06.2009, 17:20:52
|
Anfänger
|
|
Registriert seit: May 2003
Beiträge: 106
|
|
AW: Keywords filtern
Hi,
bitte.
Du benötigst noch eine Stopp-Wort-Liste, die in einer Datei kdawords.txt angelegt wird.
Gruß
Code:
<?php
$q=http://www.e-walking.de
print_r(kda($q));
function kda($url)
{
if(!stristr($url, 'http://'))
{
$url = 'http://'.$url;
}
if($html = @file_get_contents($url))
{
$html = html_entity_decode(file_get_contents($url));
//preg_match('/(?<=<title>).*?(?=<\\/title>)/is', $html, $matches);
//$title = array_shift($matches);
$meta_tags = get_meta_tags($url);
$html = kda_strip_tag_script($html);
$no_html = strip_tags($html);
$tag_info = $meta_tags['description']." ".$meta_tags['keywords'];
$text .= $tag_info." ".$no_html;
$total = count(explode(' ', $text));
$text = kda_clean(kda_stopWords($text));
$words = explode(' ', $text);
$total = count($words);
for($x=0; $x<$total; $x++)
{
$words[$x] = trim($words[$x]);
if($words[$x]!='')
{
$ws[$words[$x]]++;
if(trim($words[$x+1])!='')
{
$phrase2 = $words[$x]." ".trim($words[$x+1]);
$ws[$phrase2]++;
if(trim($words[$x+2])!='')
{
$phrase3 = $words[$x]." ".trim($words[$x+1])." ".trim($words[$x+2]);
$ws[$phrase3]++;
}
}
}
}
foreach($ws as $word=>$count)
{
if( ($count>1) and (strlen($word)>2) )
{
$phrase_size = count(explode(' ', $word));
$occurances[$phrase_size] = $occurances[$phrase_size] + $count;
}
}
foreach($ws as $word=>$count)
{
if( ($count>1) and (strlen($word)>2) )
{
$phrase_size = count(explode(' ', $word));
$density = round( ($count/$occurances[$phrase_size])*100, 2);
$dens[$phrase_size][$word] = $density;
}
}
arsort($dens[1]);
if($dens[2])
{
arsort($dens[2]);
}
if($dens[3])
{
arsort($dens[3]);
}
$return = array('dens'=>$dens, 'occurances'=>$occurances);
/*
echo "<pre>";
print_r($occurances);
print_r($dens);
*/
return $return ;
}else {
return false;
}
}
function kda_strip_tag_script($html) {
$pos1 = false;
$pos2 = false;
do {
if ($pos1 !== false && $pos2 !== false) {
$first = NULL;
$second = NULL;
if ($pos1 > 0)
$first = substr($html, 0, $pos1);
if ($pos2 < strlen($html) - 1)
$second = substr($html, $pos2);
$html = $first . $second;
}
preg_match("/<script[^>]*>/i", $html, $matches);
$str1 =& $matches[0];
preg_match("/<\/script>/i", $html, $matches);
$str2 =& $matches[0];
$pos1 = strpos($html, $str1);
$pos2 = strpos($html, $str2);
if ($pos2 !== false)
$pos2 += strlen($str2);
} while ($pos1 !== false && $pos2 !== false);
return $html;
}
function kda_clean($text)
{
global $stopwords_file;
$text = str_replace('.', '', $text);
$text = str_replace(',', '', $text);
$text = str_replace('(', '', $text);
$text = str_replace(')', '', $text);
$text = str_replace('_', '', $text);
$text = str_replace('*', '', $text);
$text = str_replace('"', '', $text);
$text = str_replace('-', '', $text);
$text = str_replace("!", '', $text);
$text = str_replace("?", '', $text);
$text = str_replace("\n", '', $text);
$text = str_replace('/', '', $text);
$text = str_replace('’', "'", $text);
return trim(strtolower($text));
}
function kda_stopWords($term)
{
global $sw_count;
//load list of common words
$common = file('kdawords.txt');
$total = count($common);
for ($x=0; $x<= $total; $x++)
{
$common[$x] = trim(strtolower($common[$x]));
}
//make array of search terms
$_terms = explode(" ", $term);
foreach ($_terms as $line)
{
if (in_array(strtolower(trim($line)), $common))
{
$removeKey = array_search($line, $_terms);
$sw_count++;
unset($_terms[$removeKey]);
}
else
{
$clean_term .= " ".$line;
}
}
return $clean_term;
}
?>
|
30.06.2009, 23:04:59
|
Anfänger
|
|
Registriert seit: Jun 2009
Alter: 54
Beiträge: 6
|
|
AW: Keywords filtern
Herzlichen Dank für deine Anregung.
Hab schon eine Badwordliste im Einsatz.
Werde mir deinen Quelltext noch mal genauer reinziehen.
Auf den ersten Blick sieht er sehr interessant aus.
Schönen Abend und liebe Grüße.
|
02.09.2009, 19:08:18
|
SELFPHP Guru
|
|
Registriert seit: Jan 2004
Ort: Leipzig
Beiträge: 4.549
|
|
AW: Keywords filtern
*rauskram*
zur termgewichtung nimmt man allgemein tf-idf, zum vergleich von dokumenten dann das vector space model mit dem cosinus z.b.
dazu gibt es eine riesige menge an literatur...
Zitat:
habe mal ein skript im netz gefunden, das die kölner phonetik implementierte - die ergebnisse waren dennoch eher enttäuschend. spracherkennung ist und bleibt ein schwieriges unterfangen .-
|
da bin ich jetzt mal pingelig: das ist wenn dann überhaupt sprachverarbeitung und nicht -erkennung. und auch wenn es schwer ist, ist doch vieles möglich.
|
10.09.2009, 15:08:58
|
SELFPHP Profi
|
|
Registriert seit: Apr 2008
Alter: 48
Beiträge: 1.938
|
|
AW: Keywords filtern
Zitat:
Zitat von feuervogel
da bin ich jetzt mal pingelig
|
es sei dir gegönnt .-
cx
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
Themen-Optionen |
|
Ansicht |
Linear-Darstellung
|
Forumregeln
|
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
Alle Zeitangaben in WEZ +2. Es ist jetzt 18:25:39 Uhr.
|