Seite 1 von 1

Tags aus Volltext extrahieren?

Verfasst: Dienstag 28. Juli 2009, 20:29
von metty
Hallo zusammen,

ich möchte hier keine Lösung o.ä. erfragen, sondern eher über verschiedene Ansätze diskutieren, wie man aus einem Volltext bzw. einer Volltextsuche "relevante" Wörter extrahieren kann. So etwas könnte z.B. bei einer Tag Cloud zum Einsatz kommen.

Angenommen ich möchte den Satz: "Max und Moritz gehen in den Wald" in sinnvolle Tags zerlegen, so würde ich nur "Max, Moritz, gehen, Wald" als wichtig erachten. Für einen Menschen ist das relativ einfach zu bewerkstelligen. Aber welche Lösungsansätze für Python könnte es hier geben?


1. Ansatz: Man führt eine Liste mit den Wörtern, die nicht getagged werden sollen, wie z.B. "ist, und, aber, ..." und übernimmt nur die Wörter die nicht in dieser Liste vorkommen.

quasi etwas ähnliches wie:

Code: Alles auswählen

satz = "Max und Moritz gehen in den Wald"
splitted = satz.split(" ")
    for word in splitted:
        if word not in woerterliste:
            do_anything()
Problem hier: Man wird nie alle Wörter wissen, die man nicht taggen will, zudem kann die Liste sehr schnell sehr groß werden und damit den ganzen Vorgang stark verlangsamen. (z.B. beim Einsatz als Webapplikation)

Ich hoffe das sich hier noch einige Ansätze sammeln lassen, vielleicht gibt es auch schon einen guten Lösungsansatz.


Freundliche Grüße

Verfasst: Dienstag 28. Juli 2009, 20:33
von EyDu
Diese Frage hat wenig bis gar nichts mit Python zu tun. Google mal ein wenig nach "Information Retrieval". Empfehlen kann ich dieses Buch, welches auch online zu lesen ist. Etwas Linguistik wird auch nicht schaden.

Verfasst: Samstag 1. August 2009, 11:24
von sma
Der einfachste Ansatz ist tatsächlich der, dass man den Text in Wörter erzerlegt und dann Stoppwörter entfernt. Ohne Performance-Tests würde ich mir jetzt (selbst in Python) keinen großen Kopf machen, dass das zu langsam sein könnte.

Code: Alles auswählen

stopwords = set("und,oder".split(","))

def tags(text):
    for m in re.finditer("(?u)\w+", text):
        w = m.group(0)
        if w not in stopwords:
            yield w
Komplizierter wird es, wenn man versucht, den Text zu verstehen. Wenn das Programm weiß, dass "Max" und "Moriz" Personen sind, die "gehen" können und "Wald" ein Ort, dann hat man auch so die relevanten Wörter gefunden. Ein übergreifendes Stichwort wäre hier "Semantik Web".

Stefan

Verfasst: Montag 3. August 2009, 14:07
von metty
sma hat geschrieben: Komplizierter wird es, wenn man versucht, den Text zu verstehen. Wenn das Programm weiß, dass "Max" und "Moriz" Personen sind, die "gehen" können und "Wald" ein Ort, dann hat man auch so die relevanten Wörter gefunden. Ein übergreifendes Stichwort wäre hier "Semantik Web".
Semantik Web soll ja DAS nächste große Ding im Internet werden. Soweit ich informiert bin, soll hier HTML 5 den Grundstein hierfür legen.

Verfasst: Montag 3. August 2009, 14:41
von HerrHagen
Semantik Web soll ja DAS nächste große Ding im Internet werden.
Das soll es schon seit vielen Jahren werden. Solange "einfache" Systeme über Suchmaschinen gut genug sind, wird sich da nicht viel tun...

MFG HerrHagen

Verfasst: Dienstag 4. August 2009, 07:36
von jens
Sinn macht es vielleicht eine "Halbautomatik" zu implementieren. Also als Grundlage werden die schon vorhandenen Tags genommen. Kommen die im Fießtext vor, ergibt das Treffer.

Die Idee finde ich gar nicht so schlecht. Vielleicht werde ich das mal in meinem PyLucid Blog plugin testen ;)

Verfasst: Dienstag 4. August 2009, 12:13
von sma
metty hat geschrieben:HTML 5 den Grundstein hierfür legen.
Also HTML 5 und die Idee des Semantik-Web haben IMHO jetzt nicht so viel miteinander zu tun. Okay, HTML 5 hat ein paar mehr Auszeichnungselemente für Kopf oder Fuß einer Seite, aber ansonsten konzentriert es sich eher auf Dinge wie besseres CSS, Video- und Audio-Unterstützung, das Canvas-Element, Offline-Mode, lokale Datenspeicherung und Web-Sockets für bessere Serverkommunikation.

Stefan