PHP: Stichwörter extrahieren aus Fliesstext

Sandro Feuillet

Legendäres Mitglied
Hi Zusammen

Kann mir jemand einen Tipp geben, wie ich aus einem Fliesstext Stichwörter extrahieren kann?
Wahrscheinlich am besten alle Wörter, die gross geschrieben sind und nicht am Anfang eines Satzes stehen.

Gruss
 
Ich würde wohl alle Wörter nehmen (RegEx etwa: \b(.+?)\b - \b sind Grenzen zwischen Wörtern und Nicht-Wörtern) und die gegen ein Wörterbuch abgleichen (eventuell statt . nur \w oder \S - Wortzeichen oder Nicht-Leerzeichen).

Bei Foren wird oft sehr schlampig geschrieben - da hilft die Berücksichtigung der Groß/Kleinschreibung nicht.
 
Handelt sich zum Glück nicht um Forentexte, sondern redaktionelle, bei denen man davon ausgehen kann, dass Sie korrekt verfasst sind.
 
Sowas funktioniert relativ einfach mit preg_match_all() und einem geeigneten regulären Ausdruck.

Z.B.: (?<!^|\.[\s]|\![\s]|\?[\s])\b[A-ZÄÜÖ][a-zäüö]+\b
 
In .NET kann man die Unicode-Kategorie Letter, Uppercase direkt adressieren:

QUOTE \b\(p{Lu}.+?)\b


(ungetestet) müßte alle Worte liefern, die mit Großbuchstaben beginnen.

Keine Ahnung, ob die PHP-Welt so etwas inzwischen auch kann. Ansonsten müßte man aufzählen:


QUOTE \b\([A-Z].+?)\b


Das ist aber ungenau, falls weitere Zeichen als erste Buchstaben zulässig sind (europäische Sprachen).


PS: Hat man bei PHP nicht die Unterscheidung zwischen gierigen und trägen Quantifikatoren?
In .NET würde das


QUOTE (?<!^|\.[\s]|\![\s]|\?[\s])\b[A-ZÄÜÖ][a-zäüö]+\b


wahrscheinlich viel zu viel liefern. Das letzte + sollte per +? träge gemacht werden.
 
Auch die Lookbehind-Assertion wird wohl nicht immer sehr genau Arbeiten (z.B. bei doppelten Whitespaces). Auf die Schnelle fällt mir aber keine andere Lösung ein, die nicht wesentlich aufwendiger und zugleich zuverlässiger ist.
 
Ich muß gestehen: Ich verstehe deinen ganzen Vorspann nicht.

Der fehlt bei mir komplett. Es reicht doch alles ab dem ersten \b, also

QUOTE \b[A-ZÄÜÖ][a-zäüö]+?\b


Einzigster Einwand ist eben das träge '+?', damit nicht gierig der letzte Worttrenner gesucht wird.
 
Das Problem dürfte wohl sein, die relevanten Stichworte zu extrahieren. Kommt noch dazu, dass dann verschiedene Varianten von Einzahl, Mehrzahl, grammatikalischen Formen zu unnötigen "Mehrfach-Nennungen" führen. Zudem sind ja viele Worte wie: der, die, wer, alle, nichts... keine sinnvollen Stichworte (diese könntest du zwar u.U. noch mit einer Wortliste ausfiltern).

Stemming wäre wohl ein erster Ansatz (vgl. http://de.wikipedia.org/wiki/Stemming)
 
QUOTE ...die gross geschrieben sind und nicht am Anfang eines Satzes stehen


Mit dem Lookbehind werden Wörter am Satzanfang ignoriert (nur bei vorangehenden Satzschlusszeichen [.!?] oder Textbeginn).
 
Naja, Kater -> Kat, Katholik -> Kathol, Käufer -> Kauf, usw. Ich weiss nicht, ob es das ist, was Sandro braucht.
 
Danke euch allen.

Brauche das, um aus einem Text einer Webseite die Meta-Keywords zu extrahieren.

Stemmen muss ich nicht, möchte ja die Wörter genau wie sie sind in den Keywords verwenden. "Der, die, das" etc. lasse ich weg in dem ich die Wörter auf mindestens vier Buchstaben begrenze. Das tuts schon.
 
QUOTE (Sandro Feuillet @ Fr 31.10.2008, 09:41) Stemmen muss ich nicht, möchte ja die Wörter genau wie sie sind in den Keywords verwenden. "Der, die, das" etc. lasse ich weg in dem ich die Wörter auf mindestens vier Buchstaben begrenze. Das tuts schon.

Na ja, du findest Sachen wie dieses, jenes, welches wichtiger als Sachen wie Sex, Fun, SAP oder Klo?
wink.gif


 
"dieses, jenes welches" ist nicht grossgeschrieben. Und die Texte kenne ich einiger massen gut, Sex und Klo kommt da nirgends vor... ;-)
 
Zurück
Oben