Podczas przetwarzania języka naturalnego (NLP) często potrzebujemy treści tekstowych, czyli: wiadomości, artykułów, porad czy wpisów na blogu. Dla osób zaznajomionych z biblioteką Requests (Python). Pewnie myślą „nie ma problemu”. Jednak czy na pewno?
Wyobraź sobie, że chcesz pobrać treść artykułu znajdującego się na stronie https://www.beautymind.pl/5-krokow-do-kapsulowej-garderoby/. Wydaje się, że to nic trudnego. Ba, możemy to zrobić bez użycia Pythona (curl rulez!). Otrzymamy jednak HTML, bardzo często nie do końca poprawny.
No i tutaj możemy sobie dalej prosto poradzić, bo możemy np. za pomocą wyrażeń regularnych wyodrębnić teksty ze znaczników HTML lub skorzystać z tzw. analizatorów tagów (a bardziej zupy tagów, z ang. tag soup), np. Beautiful Soup. Jednak wyodrębniony tekst będzie zawierał dużą ilość szumu, a to menu górne, dolne, zapowiedzi innych artykułów itp. My natomiast chcemy dokładnie treść artykuły znajdującego się na stronie oraz ewentualnie jego dodatkowe atrybuty (tytuł, zdjęcie/obraz wiodący itp.)!
Zapewne wielu z Was już kombinuje w głowie, jak uniwersalnie zrobić to samemu (a sposobów jest wiele). Jednak dlaczego nie spróbować czegoś gotowego?
Jednym z seniorów wśród bibliotek do ekstrakcji artykułów jest projekt Goose3. Korzystanie z biblioteki jest banalnie proste. Zaczynamy oczywiście od instalacji, pamiętając (jeśli używamy lokalnego środowiska programistycznego) o tzw. środowiskach wirtualnych (venv).
pip install goose3
Teraz czas na użycie i pobranie naszego przykładowego artykułu o kapsułowych garderobach (wtf?)
from goose3 import Goose g = Goose() article = g.extract(url='https://www.beautymind.pl/5-krokow-do-kapsulowej-garderoby/') print(article.cleaned_text) g.close()
W efekcie otrzymujemy dokładnie treść artykułu bez zbędnego szumu. Oczywiście klasa Goose() posiada wiele dodatkowych atrybutów i metod, które możesz wykorzystać we własnych projektach, takich jak meta dane strony, autor, zdjęcie przewodnie czy multimedia osadzone w artykule.
Gdzie możemy użyć Goose3 lub podobnie działających bibliotek? Na przykład: budowanie własnych zbiorów danych (oczywiście ręcznie lub automatycznie etykietowanych) dla różnych algorytmów klasyfikacji. Inny przykład to analiza konkurencji (np. blogi związane z e-commerce) lub w narzędziach SEO. W tych dwóch ostatnich przypadkach warto przepuścić treść artykułu „przez” NER (np. wykrywając marki i firmy) lub zrobić zestawienie częstotliwości występowania poszczególnych słów kluczowych vs. pozycja artykułu w SERP (Search Engine Results Page) Google.
Oczywiście wydobycie pojedynczego artykułu jest jednym z ostatnich etapów transformacji danych gdzieś wcześniej trzeba zbudować sobie bazę linków do artykułów (web crawling). Czasami nie chodzi nam tylko o artykuły, ale o inne klasy obiektów np. produkty. Niezależnie od tego dostajemy różne utrudnienia jak np. strony dynamicznie pobierające dane z backendu czy wiele artykułów/produktów na jednej stronie. Wtedy bez klasycznego scrapingu nic nie uzyskamy. Jeśli interesuje Cię „skrobanie” danych ze stron internetowych, polecam książkę „Python i AI dla e-commerce„, gdzie poświęciłem temu tematowi jeden solidny rozdział.
Kody do tego przykładu można również znaleźć na Kaggle pod adresem https://www.kaggle.com/sensxyz/ekstrakcja-tekstu-goose3. Można je tam łatwo komentować, uruchamiać, kopiować i modyfikować. No, a warto poznać Kaggle od środka, czyli: brać udział w konkursach, dyskutować i przeglądać miliony zbiorów danych i fantastycznych notatników. Wszystko zgodnie z moim autorskim planem rozwoju kompetencji Python – episode 01.
Obserwuj mnie