Od jakiegoś czasu próbowałem znaleźć sposób na inteligentne wyodrębnienie „odpowiedniego” tekstu z adresu URL poprzez wyeliminowanie tekstu związanego z reklamami i całego innego bałaganu. Po kilku miesiącach poszukiwań porzuciłem to jako problem których nie można dokładnie określić. (Próbowałem różnych sposobów, ale żaden nie był wiarygodny)
Tydzień temu natknąłem się na Readability - wtyczkę, która konwertuje dowolny adres URL na czytelny tekst. Wydaje mi się to całkiem dokładne. Domyślam się, że w jakiś sposób mają algorytm, który jest wystarczająco inteligentny, aby wyodrębnić odpowiedni tekst.
Czy ktoś wie, jak oni to robią? Albo jak mogłem to zrobić niezawodnie?
javascript
asp.net
extraction
user300981
źródło
źródło
Odpowiedzi:
Na czytelność składają się głównie heurystyki, które w wielu przypadkach „po prostu jakoś dobrze działają”.
Napisałem kilka artykułów naukowych na ten temat i chciałbym wyjaśnić, dlaczego łatwo jest znaleźć rozwiązanie, które działa dobrze, a kiedy trudno jest uzyskać dokładność bliską 100%.
Wydaje się, że istnieje prawo językowe leżące u podstaw ludzkiego języka, które jest również (ale nie wyłącznie) widoczne w treści strony internetowej, które już dość wyraźnie oddziela dwa rodzaje tekstu (pełny tekst i niepełny tekst lub, z grubsza, „ treść główna „a„ szablonowy ”).
Aby uzyskać główną zawartość z HTML, w wielu przypadkach wystarczy zachować tylko elementy tekstowe HTML (tj. Bloki tekstu, które nie są przerywane przez znaczniki), które mają więcej niż około 10 słów. Wydaje się, że ludzie wybierają jeden z dwóch typów tekstu („krótki” i „długi”, mierzony liczbą słów, które emitują) dla dwóch różnych motywacji pisania tekstu. Nazwałbym je motywacjami „nawigacyjnymi” i „informacyjnymi”.
Jeśli autor chce, abyś szybko zrozumiał to, co jest napisane, używa tekstu „nawigacyjnego”, czyli kilku słów (np. „STOP”, „Przeczytaj to”, „Kliknij tutaj”). Jest to najbardziej widoczny typ tekstu w elementach nawigacyjnych (menu itp.)
Jeśli autor chce, abyś głęboko zrozumiał, co ma na myśli, używa wielu słów. W ten sposób niejednoznaczność jest usuwana kosztem wzrostu liczby zwolnień. Treść podobna do artykułu zwykle mieści się w tej klasie, ponieważ zawiera więcej niż tylko kilka słów.
Chociaż ta separacja wydaje się działać w wielu przypadkach, staje się trudna w przypadku nagłówków, krótkich zdań, zastrzeżeń, stopek dotyczących praw autorskich itp.
Istnieją bardziej wyrafinowane strategie i funkcje, które pomagają oddzielić główną treść od schematu. Na przykład gęstość linków (liczba słów w bloku, które są połączone w porównaniu z całkowitą liczbą słów w bloku), cechy poprzednich / następnych bloków, częstotliwość określonego tekstu bloku w „całej” sieci, Struktura DOM dokumentu HTML, wizualny obraz strony itp.
Możesz przeczytać mój najnowszy artykuł „ Wykrywanie tablic kotłowych przy użyciu funkcji płytkiego tekstu ”, aby uzyskać wgląd z teoretycznej perspektywy. Możesz również obejrzeć wideo z mojej prezentacji na VideoLectures.net.
„Czytelność” wykorzystuje niektóre z tych funkcji. Jeśli uważnie przyjrzysz się dziennikowi zmian SVN, zobaczysz, że liczba strategii zmieniała się w czasie, podobnie jak jakość ekstrakcji czytelności. Na przykład wprowadzenie gęstości linków w grudniu 2009 r. Bardzo pomogło w ulepszeniu.
Moim zdaniem nie ma zatem sensu mówienie „Czytelność robi to w ten sposób” bez podawania dokładnego numeru wersji.
Opublikowałem bibliotekę do ekstrakcji treści HTML Open Source o nazwie boilerpipe , która zapewnia kilka różnych strategii ekstrakcji. W zależności od przypadku użycia jeden lub drugi ekstraktor działa lepiej. Możesz wypróbować te ekstraktory na wybranych stronach, korzystając z towarzyszącej aplikacji sieciowej boilerpipe w Google AppEngine.
Aby liczby przemówiły, odwiedź stronę „ Benchmarks ” na wiki boilerpipe, która porównuje niektóre strategie ekstrakcji, w tym boilerpipe, Readability i Apple Safari.
Powinienem wspomnieć, że te algorytmy zakładają, że główna treść jest w rzeczywistości pełnym tekstem. Zdarzają się przypadki, w których „treść główna” jest czymś innym, np. Obrazem, tabelą, filmem itp. Algorytmy nie sprawdzą się dobrze w takich przypadkach.
Twoje zdrowie,
chrześcijanin
źródło
czytelność to bookmarklet javascript. czyli kod po stronie klienta, który manipuluje DOM. Spójrz na javascript i powinieneś być w stanie zobaczyć, co się dzieje.
Czytelność przepływu pracy i kod:
A jeśli podążasz za plikami JS i CSS, które wciąga powyższy kod, otrzymasz pełny obraz:
http://lab.arc90.com/experiments/readability/js/readability.js (to całkiem dobrze skomentowane, ciekawa lektura)
http://lab.arc90.com/experiments/readability/css/readability.css
źródło
Oczywiście nie ma w 100% niezawodnego sposobu, aby to zrobić. Możesz rzucić okiem na kod źródłowy czytelności tutaj
Zasadniczo próbują zidentyfikować pozytywne i negatywne bloki tekstu. Identyfikatory dodatnie (tj. Identyfikatory div) wyglądałyby następująco:
Negatywne identyfikatory to:
A potem mają mało prawdopodobnych i być może kandydatów. To, co zrobiliby, to określić, co najprawdopodobniej będzie główną treścią witryny, patrz wiersz
678
w źródle czytelności. Odbywa się to poprzez analizę głównie długości akapitów, ich identyfikatorów (patrz wyżej), drzewa DOM (tj. Jeśli akapit jest ostatnim węzłem potomnym), usunięcie wszystkiego, co jest niepotrzebne, usunięcie formatowania itp.Kod ma 1792 linie. Wydaje się, że to nietrywialny problem, więc może stamtąd możesz czerpać inspiracje.
źródło
Ciekawy. Opracowałem podobny skrypt PHP. Zasadniczo skanuje artykuły i dołącza części mowy do całego tekstu (Brill Tagger). Następnie zdania niepoprawne gramatycznie są natychmiast eliminowane. Nagłe zmiany zaimków lub czasu przeszłego wskazują, że artykuł się skończył lub jeszcze się nie rozpoczął. Powtarzające się frazy są wyszukiwane i usuwane, np. „Yahoo news sports finance” pojawia się na stronie dziesięć razy. Możesz również uzyskać statystyki dotyczące tonu z mnóstwem banków słów odnoszących się do różnych emocji. Nagłe zmiany tonu, od aktywnego / negatywnego / finansowego do pasywnego / pozytywnego / politycznego, wskazują granicę. To naprawdę nieskończone, jakkolwiek chcesz kopać głęboko.
Głównymi problemami są łącza, osadzone anomalie, style skryptów i aktualizacje.
źródło