SELFPHP: Version 5.8.2 Befehlsreferenz - Tutorial – Kochbuch – Forum für PHP Einsteiger und professionelle Entwickler

SELFPHP


Professional CronJob-Service

Suche



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



:: Buchempfehlung ::

TYPO3 Kochbuch

TYPO3 Kochbuch zur Buchempfehlung
 

:: Anbieterverzeichnis ::

Globale Branchen

Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP  

 

:: Newsletter ::

Abonnieren Sie hier den kostenlosen SELFPHP Newsletter!

Vorname: 
Name:
E-Mail:
 
 

Zurück   PHP Forum > SELFPHP > PHP für Fortgeschrittene und Experten

PHP für Fortgeschrittene und Experten Fortgeschrittene und Experten können hier über ihre Probleme und Bedenken talken

Antwort
 
Themen-Optionen Ansicht
  #1  
Alt 09.06.2009, 13:32:57
hystyria hystyria ist offline
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)
Mit Zitat antworten
  #2  
Alt 10.06.2009, 10:40:03
cortex cortex ist offline
SELFPHP Profi
 
Registriert seit: Apr 2008
Alter: 48
Beiträge: 1.938
AW: Keywords filtern

hallo, ein paar anmerkungen meinerseits:

Zitat:
Zitat von hystyria Beitrag anzeigen
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 Beitrag anzeigen
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 Beitrag anzeigen
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 Beitrag anzeigen
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
Mit Zitat antworten
  #3  
Alt 10.06.2009, 23:46:22
hystyria hystyria ist offline
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)
Mit Zitat antworten
  #4  
Alt 11.06.2009, 09:15:07
cortex cortex ist offline
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
Mit Zitat antworten
  #5  
Alt 14.06.2009, 17:20:52
sinfo sinfo ist offline
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;    
    }

?>
Mit Zitat antworten
  #6  
Alt 30.06.2009, 23:04:59
hystyria hystyria ist offline
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.
Mit Zitat antworten
  #7  
Alt 02.09.2009, 19:08:18
feuervogel feuervogel ist offline
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.
Mit Zitat antworten
  #8  
Alt 10.09.2009, 15:08:58
cortex cortex ist offline
SELFPHP Profi
 
Registriert seit: Apr 2008
Alter: 48
Beiträge: 1.938
AW: Keywords filtern

Zitat:
Zitat von feuervogel Beitrag anzeigen
da bin ich jetzt mal pingelig
es sei dir gegönnt .-

cx
Mit Zitat antworten
Antwort


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen
Ansicht

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.

BB-Code ist an.
Smileys sind aus.
[IMG] Code ist aus.
HTML-Code ist aus.

Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Ausgelesene MySQL-Datensätze filtern neoman PHP Grundlagen 9 13.10.2008 16:49:39
meta tag keywords rsciw HTML, CSS und JavaScript Help! 2 09.11.2006 19:34:06
String vergleichen und filtern ? -=LUPO=- PHP Grundlagen 3 02.09.2006 12:28:14
Bestimmte Sachen filtern hachener PHP Grundlagen 6 30.05.2006 23:17:04
werte filtern marcmarc MySQLi/PDO/(MySQL) 5 08.08.2003 14:18:06


Alle Zeitangaben in WEZ +2. Es ist jetzt 18:25:39 Uhr.


Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.


© 2001-2024 E-Mail SELFPHP OHG, info@selfphp.deImpressumKontakt