Programmgesteuertes Erkennen von "wichtigstem Inhalt" auf einer Seite

8

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.

    
Sampson 16.06.2009, 20:16
quelle

12 Antworten

11

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 .

    
Colin Pickard 19.06.2009, 14:08
quelle
11
  

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:

  • URL öffnen
  • lesen Sie alle Links zu derselben Website von dieser Seite
  • Folgen Sie allen Links und erstellen Sie eine DOM-Struktur für jede URL (HTML-Datei)
  • Dies sollte Ihnen dabei helfen, überflüssige Inhalte (inklusive Vorlagen usw.) zu finden
  • vergleicht DOM-Bäume für alle Dokumente auf derselben Site (Tree Walking)
  • strip alle redundanten Knoten (d. h. wiederholt, Navigationsmarkierung, Anzeigen und solche Dinge)
  • versuchen, ähnliche Knoten zu identifizieren und wenn möglich zu strippen
  • finde die größten eindeutigen Textblöcke, die nicht in anderen DOMs auf dieser Website zu finden sind (d. h. einzigartiger Inhalt)
  • als Kandidat für die weitere Verarbeitung hinzufügen

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.

    
none 19.06.2009 13:27
quelle
10

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.

    
Ian Jacobs 16.06.2009 20:34
quelle
2

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)

    
Szere Dyeri 18.06.2009 22:30
quelle
2

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.

    
Alex S 18.06.2009 22:25
quelle
1

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.

    
Robert Harvey 16.06.2009 20:27
quelle
0

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.

    
atfergs 16.06.2009 20:27
quelle
0

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.

    
JacquesB 19.06.2009 13:39
quelle
0

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.

    
Alan Plum 19.06.2009 14:05
quelle
0

Instapaper macht einen guten Job dabei. Vielleicht möchten Sie Marco Arments Blog für Hinweise darüber, wie er es getan hat.

    
Kristopher Johnson 19.06.2009 14:11
quelle
0

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.

    
Fiur 19.06.2009 14:04
quelle
0

Da Lesbarkeit nicht mehr verfügbar ist:

  • Wenn Sie nur an dem Ergebnis interessiert sind, verwenden Sie den Readability-Nachfolger Mercury , einen Webdienst.
  • Wenn Sie an Code interessiert sind, wie dies gemacht werden kann und JavaScript bevorzugt, dann gibt es Mozillas Readability.js , welches für die Reader-Ansicht von Firefox verwendet wird.
  • Wenn Sie Java bevorzugen, können Sie sich Crux ansehen, was auch ziemlich gut funktioniert.
  • Oder wenn Kotlin mehr Ihre Sprache ist, dann können Sie Readability4J , einen Port der Readability.js von oben, ansehen.
dankito 07.12.2017 21:51
quelle