Halihallo Forumer
Ich würde gerne einige Meinungen einholen um mir das Entscheiden etwas zu erleichtern.
Es geht um eine Software, welche Texte automatisch zusammenfasst. Der Algorithmus zur
Textanalyse basiert weitestgehend auf Luhn (Stichwörter: Luhn, automatic abstracting,
cluster(ing|ization), relevant word). Vereinfacht ausgedrückt besagt Luhn, dass ein
relevanter Satz ein Satz mit möglichst vielen relevanten Wörtern ist. Nun ist die Frage:
Was ist ein "relevantes Wort" oder besser: wie bringe ich dies dem Computer bei?
<img src="http://www.emedias.ch/tmp/significance.gif" border="0" alt="">
in diesem Diagram sieht man die relative Häufigkeit (Frequenz) der Wörter auf der
vertikalen und die extrahierten Terme (Wörter) auf der Horizontalen. Nach Luhns
Definition ist ein relevantes Wort ein Wort, dass nicht zu oft (wie z.B. und, oder,
nicht, in, über, ich, ...) und nicht fast nie (Hausbootwaschutensilienvorratskammer) vor-
kommt. Es sind also alle Wörter relevant, die irgendwo in der "Mitte" liegen, da diese
für den Text "relevant" sind, aber auch nicht in jedem anderen Text vorkommen (
sprich: allgemein verwendete Wörter).
So, mein Problem ist nun ein Algorithmus zu finden, der die Spreu vom Weizen trennt.
Ein Algorithmus also, der relevante von irrelevanten Wörtern trennt. Es gibt natürlich
tausende von Lösungsmöglichkeiten.
Ausschlusskriterien:
- Algorithmus nicht parametrisiert (keine Benutzereingaben)
(ausser vielleicht einer Anzahl an relevanten Wörtern, also der Benutzer definiert,
dass er genau 200 relevante Wörter indexieren will)
- Algorithmus basiert nicht auf historischen/wissensbasierten (Thesaurus, füher
indexierte Dokumente z.B.) Daten/Systemen
- rein mathematisch/statistisches Verfahren
Möglichkeiten:
Puh... Naja, gehen wir von oben gesehenem Diagramm aus, haben wir in den oberen
Frequenzbereichen eine starke Dichte, es scheinen also viele Wörter sehr oft vorzukommen.
Dann flacht das ganze ab und "strebt" gegen 0. Also eine Art log(n)-Funktion (wenn ich
mich recht erinnere).
a) Terme kleiner Häufigkeit: Naja, diese fallen beim Abstracting (Zusammenfassen
meinetwegen) nicht sehr stark ins Gewicht, also könnte ich mir hier eine kleine
Vereinfachung erlauben, dass ich einfach die letzten x Terme aus dem Vokabular der
relevanten Terme entferne. Für x wählt man kleine Zahl, die zur Anzahl indexierter
Wörter proportional ist (aber klein muss sie sein, sonst löschen wir die relevanten
Wörter).
b) die in der Mitte sind gesucht, die lassen wir ja stehen! ;)
c) Terme grosser Häufigkeit: Hier bin ich ziemlich unschlüssig und bräuchte euren Input.
Man bräuchte irgendwie eine Schranke, eine Grenze, diese liesse sich natürlich einfach
über den Benutzer eingeben, aber das will ich nicht. Es soll algorithmisch möglichst
"sicher" funktionieren (natürlich, mindestens ein "Erfahrungswert" brauchen wir, aber
dieser sollte dem Dokument irgendwie angepasst werden). Einfach ausgedrückt haben wir
einige Frequenzbänder (mehrere Wörter können gleich häufig sein und haben dieselbe
Frequenz, aber zwischen der einen Frequenz und der nächsten gibt es ein "Loch").
Total: [1,0] (relative Häufigkeit 1 - 0)
Oft vorkommende Wörter: [1,m]
Relevante Wörter: [m,n]
Wenig vorkommende Wörter: [n,0]
c1) wir haben die Terme kleiner Häufigkeit weggestrichen, nun könnte man einfach die
nach Frequenz geordnet "x" nächsten als relevant definieren. Problem: x wird mit
der Anzahl Wörter im Text proportional steigen und Proportionalität impliziert
eine Konstante: x ~ Wörter_im_Text = x = _Konstante_ * Wörter_im_Text. Zudem
basiert die Löschung der Terme niedriger Häufigkeit auch auf diese Konstante.
c2) wir definieren relevante Wörter als die nächsten x Frequenzen/-bänder nach den
niederfrequenten Termen (wenig vorkommende Wörter).
c3) wir definieren relevante Wörter als eine folge von Wörtern, die mindestens
Anzahl_Wörter_im_Text/15 Wörter umfasst und nicht zu den letzten
Anzahl_Wörter_im_Text/20 Wörtern gehört (also die zwanzig seltensten auftauchenden
Wörter werden gestrichen und die nächsten 15 werden als relevant gekennzeichnet,
wenn der Text 100 Wörter hat).
c4-cn, n->infinity) man möge mir die Wege weisen.
Eben: Lösungen gibt es tausende und jede hat Vor- und Nachteile. Mir geht es irgendwie
darum auch hier die Spreu vom Weizen zu trennen. Was würded ihr an meiner Stelle ent-
scheiden, welche algorithmische Umsetzung würded ihr hier anstreben?
Ich weiss, die Frage ist nicht leicht, wahrscheinlich deshalb, weil sie nicht mit ja,
nein oder einfach "einfach" zu beantworten ist. Es geht mir auch nicht um eine Lösung,
sondern um Input, um Vorschläge, um Argumentation, um Auseinandersetzung. Ich würde mich
auch nur auf eine kleine Diskussion zum Thema freuen, mit virtuellem Kaffe und Cookies
:-)
Keine Ahnung, sagt bitte irgendwas, ich befinde mich in einer Feedback-Schleife, meine
Raumzeit ist derart gekrümmt, dass ich dieselben Gedanken immer wieder durchlaufe :-)
Viele Grüsse
Philipp
RTFM! - Foren steigern das Aufkommen von Redundanz im Internet, danke für das lesen der Manuals.
Selbstbedienung! - Das SelfForum ist ein Gratis-Restaurant mit Selbstbedienung, Menüangebot steht in den </faq/> und dem </archiv/>.