Was wurde getan, um die wichtigsten Daten in einem HTML-Dokument automatisch zu ermitteln? Als Beispiel, denken Sie an Ihre Standard-Nachrichten / Blog / Magazin-Stil Website, enthält Navigation (mit Submenu möglicherweise), Anzeigen, Kommentare und der Preis - unser Artikel / Blog / News-Body.
Wie würden Sie feststellen, welche Informationen auf einer Nachrichten / Blog / Zeitschrift die primären Daten in einer automatisierten Weise sind?
Hinweis: Im Idealfall würde die Methode mit gut ausgearbeitetem Markup und schrecklichem Markup funktionieren. Ob jemand Absatzmarken verwendet, um Absätze zu erstellen, oder eine Reihe von Unterbrechungen.
Lesbarkeit macht genau das Richtige.
Es ist Open Source und im Google-Code veröffentlicht .
UPDATE: Ich sehe ( via HN ), dass jemand die Lesbarkeit zu RSS-Feeds automatisch in ein nützlicheres Format umwandeln .
Denken Sie an Ihre Standard-Website im Stil von News / Blogs / Magazinen mit Navigation (mit Untermenüs), Anzeigen, Kommentaren und dem Preis - unserem Artikel / Blog / News-Body.
Wie würden Sie feststellen, welche Informationen auf einer Nachrichten / Blog / Zeitschrift die primären Daten in einer automatisierten Weise sind?
Ich würde wahrscheinlich so etwas versuchen:
Dieser Ansatz scheint ziemlich vielversprechend zu sein, weil er ziemlich einfach zu machen ist, aber trotzdem ein gutes Potential hat, adaptiv zu sein, selbst auf komplexen Web 2.0-Seiten, die Vorlagen verwenden, weil sie ähnliche HTML-Knoten identifizieren würden zwischen allen Seiten auf der gleichen Website.
Dies könnte wahrscheinlich noch dadurch verbessert werden, dass ein Punktesystem verwendet wird, um DOM-Knoten zu verfolgen, die zuvor eindeutige Inhalte enthielten, so dass diese Knoten für andere Seiten priorisiert werden.
Manchmal gibt es einen CSS-Medienbereich, der als 'Drucken' definiert ist. Der Verwendungszweck ist für Links "Hier klicken, um diese Seite zu drucken". Normalerweise benutzen Leute es, um eine Menge des Flaums zu streichen und nur das Fleisch der Information zu lassen.
Ich würde versuchen, diesen Stil zu lesen, und dann kratzen, was noch sichtbar ist.
Sie können Support-Vektor-Maschinen verwenden, um eine Textklassifizierung durchzuführen. Eine Idee besteht darin, Seiten in verschiedene Abschnitte zu zerlegen (zB jedes Strukturelement wie ein div zu betrachten ist ein Dokument) und einige Eigenschaften davon zu sammeln und sie in einen Vektor zu konvertieren. (Wie andere Leute vorgeschlagen haben, könnte dies die Anzahl der Wörter, die Anzahl der Links, die Anzahl der Bilder, desto besser.)
Beginnen Sie zuerst mit einer großen Menge von Dokumenten (100-1000), die Sie bereits auswählen, welcher Teil der Hauptteil ist. Verwende diesen Satz dann, um deine SVM zu trainieren.
Und für jedes neue Dokument müssen Sie es nur in Vektor konvertieren und an SVM übergeben.
Dieses Vektormodell ist in der Textklassifikation sehr nützlich und Sie müssen nicht unbedingt eine SVM verwenden. Sie können auch ein einfacheres Bayes-Modell verwenden.
Und wenn Sie interessiert sind, finden Sie weitere Details in Einführung in Information Retrieval . (Kostenlos online verfügbar)
Ich denke, der einfachste Weg wäre, nach dem größten Textblock ohne Markup zu suchen. Dann, wenn es einmal gefunden ist, finde die Grenzen heraus und extrahiere es. Wahrscheinlich möchten Sie bestimmte Tags von "Nicht Markup" wie Links und Bilder ausschließen, je nachdem, was Sie anvisieren. Wenn dies über eine Schnittstelle verfügt, fügen Sie möglicherweise eine Checkbox-Liste mit Tags hinzu, die von der Suche ausgeschlossen werden sollen.
Sie können auch nach der untersten Ebene in der DOM-Struktur suchen und herausfinden, welches dieser Elemente am größten ist, aber das würde auf schlecht geschriebenen Seiten nicht gut funktionieren, da der Dom-Baum auf solchen Seiten oft unterbrochen wird. Wenn Sie damit enden, würde ich einen Weg finden, um zu sehen, ob der Browser Quirks-Modus eingegeben hat, bevor Sie es versuchen.
Sie können auch versuchen, mehrere dieser Überprüfungen zu verwenden und dann eine Metrik zu erstellen, um zu entscheiden, welche die beste ist. Zum Beispiel, versuchen Sie immer noch, meine zweite Option oben zu verwenden, aber geben Sie ihr Ergebnis eine niedrigere "Bewertung", wenn der Browser normal in Macken Modus würde. Das würde natürlich die Leistung beeinträchtigen.
Ich denke, ein sehr effektiver Algorithmus könnte sein: "Welcher DIV enthält den meisten Text, der nur wenige Links enthält?"
Selten haben Anzeigen mehr als zwei oder drei Sätze Text. Schauen Sie sich zum Beispiel die rechte Seite dieser Seite an.
Der Inhaltsbereich ist fast immer der Bereich mit der größten Breite auf der Seite.
Ich würde wahrscheinlich mit Title und allem anderen in einem Head-Tag beginnen, dann die Überschrift-Tags der Reihe nach filtern (dh h1, h2, h3, usw.) ... darüber hinaus würde ich wohl in Reihenfolge gehen, von oben nach unten. Je nachdem, wie es gestylt ist, kann man davon ausgehen, dass ein Seitentitel eine ID oder eine eindeutige Klasse hat.
Ich würde Sätze mit Interpunktion suchen. Menüs, Kopfzeilen, Fußzeilen usw. enthalten normalerweise einzelne Wörter, aber keine Sätze, die mit Kommas enden und in Punkt- oder äquivalenten Satzzeichen enden.
Sie können nach dem ersten und letzten Element suchen, das Sätze mit Interpunktion enthält, und alles dazwischen nehmen. Header sind ein Sonderfall, da sie normalerweise keine Interpunktion haben, aber Sie können sie normalerweise als Hn Elemente unmittelbar vor Sätzen erkennen.
Obwohl dies offensichtlich nicht die Antwort ist, würde ich annehmen, dass sich der wichtige Inhalt nahe der Mitte der formatierten Seite befindet und normalerweise aus mehreren Blöcken besteht, die durch Überschriften und dergleichen unterbrochen werden. Die Struktur selbst kann auch ein Vorteil im Markup sein.
Ein Unterschied zwischen Artikeln / Posts / Threads wäre ein guter Filter, um herauszufinden, welcher Inhalt eine bestimmte Seite auszeichnet (offensichtlich müsste dies erweitert werden, um zufälligen Mist wie Anzeigen, "Zitat des Tages" oder Banner auszufiltern) ). Die Struktur des Inhalts kann für mehrere Seiten sehr ähnlich sein. Verlassen Sie sich daher nicht zu sehr auf strukturelle Unterschiede.
Instapaper macht einen guten Job dabei. Vielleicht möchten Sie Marco Arments Blog für Hinweise darüber, wie er es getan hat.
Heute verwenden die meisten News / Blogs Websites eine Blogging-Plattform. Also würde ich eine Reihe von Regeln erstellen, nach denen ich nach Inhalten suchen würde. Zum Beispiel sind zwei der beliebtesten Blogging-Plattformen Wordpress und Google Blogspot.
Wordpress Beiträge sind markiert mit:
%Vor%Blogspot-Posts sind gekennzeichnet durch:
%Vor%Wenn die Suche nach CSS-Klassen fehlschlägt, können Sie sich den anderen Lösungen zuwenden, indem Sie den größten Teil des Textes identifizieren und so weiter.
Da Lesbarkeit nicht mehr verfügbar ist:
Tags und Links language-agnostic design-patterns screen-scraping