Tags aus Volltext extrahieren?

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
metty
User
Beiträge: 99
Registriert: Samstag 13. Dezember 2008, 19:30

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
Zuletzt geändert von metty am Dienstag 28. Juli 2009, 20:41, insgesamt 3-mal geändert.
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

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.
Das Leben ist wie ein Tennisball.
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

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
metty
User
Beiträge: 99
Registriert: Samstag 13. Dezember 2008, 19:30

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.
Benutzeravatar
HerrHagen
User
Beiträge: 430
Registriert: Freitag 6. Juni 2008, 19:07

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
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

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 ;)

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

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
Antworten