Wydobywanie informacji ze strony internetowej za pomocą uczenia maszynowego

Chciałbym wyodrębnić określony typ informacji ze stron internetowych w Pythonie. Powiedzmy adres pocztowy. Ma tysiące form, ale mimo to jest jakoś rozpoznawalny. Ponieważ istnieje duża liczba form, prawdopodobnie bardzo trudno byłoby napisać Wyrażenie regularnelub nawet coś w rodzaju gramatykii użyć generatora parsera do jego analizy.

Więc myślę, że powinienem pójść drogą uczenia maszynowego . If I understand it cóż, powinienem być w stanie zrobić próbkę danych, gdzie wskażę, co powinno być wynikiem, a następnie mam coś, co może nauczyć się z tego, jak rozpoznać wynik sam w sobie. To wszystko, co wiem o uczeniu maszynowym. Może przydałoby mi się jakieś przetwarzanie języka naturalnego , ale chyba nie bardzo, ponieważ wszystkie biblioteki pracują głównie z angielskim i potrzebuję tego do czeskiego.

Pytania:

  1. Czy mogę łatwo rozwiązać ten problem przez uczenie maszynowe? Czy to dobry dobra robota?
  2. czy są jakieś proste przykłady, które pozwoliłyby mi zacząć? Jestem noobem uczenia maszynowego i potrzebuję czegoś praktycznego na początek; bliżej mojego problemu jest lepiej; prostsze jest lepsze.
  3. istnieje wiele bibliotek Pythona do uczenia maszynowego. Który najbardziej odpowiada mojemu problemowi?
  4. wiele takich bibliotek nie ma zbyt łatwych w użyciu dokumentów, ponieważ pochodzą ze środowiska naukowego. Czy są jakieś dobre źródła (książki, artykuły, quickstarty) gap, czyli skupiony na początkujących, którzy zupełnie nic nie wiedzą o uczeniu maszynowym? Wszystkie dokumenty, które otwieram, zaczynają się od terminów, których nie rozumiem, takich jak network, klasyfikacja, datasets , etc.

Aktualizacja:

Jak wszyscy wspomnieliście, powinienem pokazać kawałek danych, który próbuję wydostać się z sieci, oto przykład. Interesuje mnie Kino repertuar. Wyglądają tak (trzy z nich):

<div class="Datum" rel="d_0">27. června – středa, 20.00
</div><input class="Datum_cas" id="2012-06-27" readonly=""><a href="index.php?den=0" rel="0" class="Nazev">Zahájení letního kina 
</a><div style="display: block;" class="ajax_box d-0">
<span class="ajax_box Orig_nazev">zábava • hudba • film • letní bar
</span>
<span class="Tech_info">Svět podle Fagi
</span>
<span class="Popis">Facebooková  komiksová Fagi v podání divadla DNO. Divoké písně, co nezařadíte, ale slušně si na ně zařádíte. Slovní smyčky, co se na nich jde oběsit. Kabaret, improvizace, písně, humor, zběsilost i v srdci.<br>Koncert Tres Quatros Kvintet. Instrumentální muzika s pevným funkovým groovem, jazzovými standardy a neodmyslitelnými improvizacemi.
</span>
<input class="Datum_cas" id="ajax_0" type="text">
</div>

<div class="Datum" rel="d_1">27. června – středa, 21.30
</div><input class="Datum_cas" id="2012-06-27" readonly=""><a href="index.php?den=1" rel="1" class="Nazev">Soul Kitchen
</a><div style="display: block;" class="ajax_box d-1">
<span class="ajax_box Orig_nazev">Soul Kitchen
</span>
<span class="Tech_info">Komedie, Německo, 2009, 99 min., čes. a angl. tit.
</span>
<span class="Rezie">REŽIE: Fatih Akin 
</span>
<span class="Hraji">HRAJÍ: Adam Bousdoukos, Moritz Bleibtreu, Birol Ünel, Wotan Wilke Möhring
</span>
<span class="Popis">Poslední film miláčka publika Fatiho Akina, je turbulentním vyznáním lásky multikulturnímu Hamburku. S humorem zde Akin vykresluje příběh Řeka žijícího v Německu, který z malého bufetu vytvoří originální restauraci, jež se brzy stane oblíbenou hudební scénou. "Soul Kitchen" je skvělá komedie o přátelství, lásce, rozchodu a boji o domov, který je třeba v dnešním nevypočitatelném světě chránit víc než kdykoliv předtím. Zvláštní cena poroty na festivalu v Benátkách
</span>
<input class="Datum_cas" id="ajax_1" type="text">
</div>

<div class="Datum" rel="d_2">28. června – čtvrtek, 21:30
</div><input class="Datum_cas" id="2012-06-28" readonly=""><a href="index.php?den=2" rel="2" class="Nazev">Rodina je základ státu
</a><div style="display: block;" class="ajax_box d-2">
<span class="Tech_info">Drama, Česko, 2011, 103 min.
</span>
<span class="Rezie">REŽIE: Robert Sedláček
</span>
<span class="Hraji">HRAJÍ: Igor Chmela, Eva Vrbková, Martin Finger, Monika A. Fingerová, Simona Babčáková, Jiří Vyorálek, Jan Fišar, Jan Budař, Marek Taclík, Marek Daniel
</span>
<span class="Popis">Když vám hoří půda pod nohama, není nad rodinný výlet. Bývalý učitel dějepisu, který dosáhl vysokého manažerského postu ve významném finančním ústavu, si řadu let spokojeně žije společně se svou rodinou v luxusní vile na okraji Prahy. Bezstarostný život ale netrvá věčně a na povrch začnou vyplouvat machinace s penězi klientů týkající se celého vedení banky. Libor se následně ocitá pod dohledem policejních vyšetřovatelů, kteří mu začnou tvrdě šlapat na paty. Snaží se uniknout před hrozícím vězením a oddálit osvětlení celé situace své nic netušící manželce. Rozhodne se tak pro netradiční útěk, kdy pod záminkou společné dovolené odveze celou rodinu na jižní Moravu…  Rodinný výlet nebo zoufalý úprk před spravedlností? Igor Chmela, Eva Vrbková a Simona Babčáková v rodinném dramatu a neobyčejné road-movie inspirované skutečností.
</span>

Lub jak to:

<strong>POSEL&nbsp;&nbsp; 18.10.-22.10 v 18:30 </strong><br>Drama. ČR/90´. Režie: Vladimír Michálek Hrají: Matěj Hádek, Eva Leinbergerová, Jiří Vyorávek<br>Třicátník Petr miluje kolo a své vášni podřizuje celý svůj život. Neplánuje, neplatí účty, neřeší nic, co může<br>počkat  do zítra. Budování společného života s přételkyní je mu proti srsti  stejně jako dělat kariéru. Aby mohl jezdit na kole, raději pracuje jako  poslíček. Jeho život je neřízená střela, ve které neplatí žádná  pravidla. Ale problémy se na sebe na kupí a je stále těžší před nimi  ujet …<br> <br>

<strong>VE STÍNU&nbsp; 18.10.-24.10. ve 20:30 a 20.10.-22.10. též v 16:15</strong><br>Krimi. ČR/98´. Režie: D.Vondříček Hrají: I.Trojan, S.Koch, S.Norisová, J.Štěpnička, M.Taclík<br>Kapitán  Hakl (Ivan Trojan) vyšetřuje krádež v klenotnictví. Z běžné vloupačky  se ale vlivem zákulisních intrik tajné policie začíná stávat politická  kauza. Z nařízení Státní bezpečnosti přebírá Haklovo vyšetřování major  Zenke (Sebastian Koch), policejní specialista z NDR, pod jehož vedením  se vyšetřování ubírá jiným směrem, než Haklovi napovídá instinkt  zkušeného kriminalisty. Na vlastní pěst pokračuje ve vyšetřování. Může  jediný spravedlivý obstát v boji s dobře propojenou sítí komunistické  policie?&nbsp; Protivník je silný a Hakl se brzy přesvědčuje, že věřit nelze  nikomu a ničemu. Každý má svůj stín minulosti, své slabé místo, které  dokáže z obětí udělat viníky a z viníků hrdiny. <br><br>

<strong>ASTERIX A OBELIX VE SLUŽBÁCH JEJÍHO VELIČENSTVA&nbsp; ve 3D&nbsp;&nbsp;&nbsp; 20.10.-21.10. ve 13:45 </strong><br>Dobrodružná fantazy. Fr./124´. ČESKÝ DABING. Režie: Laurent Tirard<br>Hrají: Gérard Depardieu, Edouard Baer, Fabrice Luchini<br>Pod  vedením Julia Caesara napadly proslulé římské legie Británii. Jedné  malé vesničce se však daří statečně odolávat, ale každým dnem je slabší a  slabší. Britská královna proto vyslala svého věrného důstojníka  Anticlimaxe, aby vyhledal pomoc u Galů v druhé malinké vesničce ve  Francii vyhlášené svým důmyslným bojem proti Římanům… Když Anticlimax  popsal zoufalou situaci svých lidí, Galové mu darovali barel svého  kouzelného lektvaru a Astérix a Obélix jsou pověřeni doprovodit ho domů.  Jakmile dorazí do Británie, Anticlimax jim představí místní zvyky ve  vší parádě a všichni to pořádně roztočí! Vytočený Caesar se však  rozhodne naverbovat Normanďany, hrůzu nahánějící bojovníky Severu, aby  jednou provždy skoncovali s Brity. <br><br>
Albo może wyglądać jak coś podobnego. Brak specjalnych reguł w znacznikach HTML, brak specjalnych reguł w kolejności itp.
Author: Honza Javorek, 2012-11-12

8 answers

Po pierwsze, twoje zadanie pasuje do ekstrakcji informacji Obszar badań. Istnieją głównie 2 poziomy złożoności tego zadania:

  • wyciąg z danej strony html lub strony internetowej ze stałym szablonem (jak Amazon). W tym przypadku najlepszym sposobem jest spojrzenie na kod HTML stron i wytworzenie odpowiednich selektorów XPath lub DOM do dostać się do właściwych informacji. Wadą takiego podejścia jest to, że nie uogólnia się na nowe strony internetowe, ponieważ trzeba to zrobić na każda strona po kolei.
  • stworzyć model, który wyodrębnia te same informacje z wielu stron internetowych w obrębie jednej domeny (posiadające założenie, że istnieje pewna nieodłączna regularność w sposobie projektanci prezentują odpowiedni atrybut, jak zip, telefon lub cokolwiek innego). W takim przypadku powinieneś stworzyć pewne funkcje (aby użyć podejścia ML i pozwolić algorytmowi IE "zrozumieć zawartość stron"). Najczęściej spotykanymi cechami są: ścieżka DOM, format wartości (atrybutu), która ma być wyodrębniony, układ (jak pogrubienie, kursywa itp.), oraz otaczające słowa kontekstowe. Oznaczasz pewne wartości(potrzebujesz co najmniej 100-300 stron w zależności od domeny, aby zrobić to z jakąś rozsądną jakością). Następnie trenujesz modelkę na oznaczonych stronach. Istnieje również alternatywa dla niego-robić IE w sposób nienadzorowany(wykorzystując ideę regularności informacji na stronach). W tym przypadku starasz się znaleźć powtarzające się wzorce na stronach (bez etykietowania) i uznać za prawidłowe te, które są najczęstsze.

Najtrudniejszą częścią będzie praca z drzewem DOM i generowanie odpowiednich funkcji. Również etykietowanie danych we właściwy sposób jest żmudnym zadaniem. Dla modeli ML-spójrz na CRF, 2DCRF, semi-markov CRF .

I wreszcie, jest to w ogólnym przypadku przełom w badaniach IE, a nie hack, że można to zrobić kilka wieczorów.

P. S. również myślę, że NLTK nie będzie zbyt pomocne - to jest NLP, a nie Web-IE biblioteka.

 41
Author: Nik,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-11-18 20:41:18

Jeśli chodzi o przetwarzanie języka naturalnego, jeśli używasz Pythona, koniecznie sprawdź fantastyczny (IMHO, niezwiązany z nimi) Zestaw Narzędzi języka naturalnego, który ma implementacje dla wielu algorytmów, z których wiele jest agnostykami językowymi (powiedzmy, n-gram).

Dla rekomendacji biblioteki uczenia maszynowego w Pythonie, powiedziałbym, że zależy to od technik, których chcesz użyć, ale opencv implementuje pewne popularne algorytmy . Uczenie maszynowe jest bardzo rozległy obszar. Tylko dla subproblemu klasyfikacji nadzorowanego uczenia, są naiwne Bayes, KNN, drzewa decyzyjne, Maszyny wektorowe wsparcia, co najmniej tuzin różnych typów sieci neuronowych... Lista jest długa. To dlatego, jak mówisz, nie ma "quickstarts" lub samouczków do uczenia maszynowego w ogóle. Moja rada to, po pierwsze, zrozumieć podstawową terminologię ML, Po drugie, zrozumieć podproblem (radzę klasyfikacja), a po trzecie, zbadaj prosty algorytm, który rozwiązuje ten podproblem (KNN opiera się na matematyce na poziomie liceum).

O Twoim problemie w szczególności: wydaje się, że chcesz wykryć istnienie kawałka danych (kodu pocztowego) wewnątrz ogromnego zbioru danych (tekstu), który jest, AFAIK, a nie typ problemu ML uchwyty. Algorytm klasyfikacyjny oczekuje stosunkowo małego wektora funkcji. Aby to uzyskać, musisz wykonać to, co nazywa się wymiarowością redukcja : oznacza to wyodrębnienie części, która wygląda jak potencjalne kody pocztowe. Dopiero wtedy algorytm klasyfikacji klasyfikuje go (np. jako "kod pocztowy "lub" nie kod pocztowy").

Tak więc, musisz znaleźć sposób na wyizolowanie potencjalnych dopasowań, zanim nawet pomyślisz o użyciu ML, aby podejść do tego problemu . To z pewnością pociągnie za sobą przetwarzanie języka naturalnego, jak powiedziałeś, jeśli nie możesz lub nie możesz użyć regex lub parsowania.

 7
Author: goncalopp,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-11-12 00:26:25

Uwaga, istnieje strona wymiany stosów poświęcona uczeniu maszynowemu i analizie statystycznej o nazwie Cross Validated. Znacznie bardziej prawdopodobne jest, że znajdziesz tam informacje istotne dla Twojego problemu.

Chociaż potrzebne są pewne umiejętności programistyczne, Uczenie maszynowe jako dziedzina jest tak naprawdę specjalnością programowania i analizy danych. Posiada własny "język" i zakłada podstawowe rozumienie operacji macierzy i algebry liniowej w ogóle. Dużo pracy specjalista ML must do, polega na manipulacji danymi źródłowymi do postaci, z którą algorytmy mogą pracować.

Na Crossie znajdziesz ludzi, którzy faktycznie rozwiązują tego typu problemy na co dzień, ale bądź przygotowany na to, że wpadniesz głęboko do króliczej nory. Jest wiele do nauczenia.

Https://stats.stackexchange.com/

 7
Author: mcstar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-04-13 12:44:17

Po pierwsze, Uczenie maszynowe nie jest magią. Algorytmy te wykonują określone zadania, nawet jeśli czasami mogą być nieco skomplikowane.

Podstawowym podejściem każdego takiego zadania jest generowanie pewnych w miarę reprezentatywnych danych oznaczonych etykietą, dzięki czemu można ocenić, jak dobrze sobie radzisz. Znaczniki "BOI" mogą działać, gdzie dla każdego słowa przypisujesz mu etykietę: "O" (Na Zewnątrz), jeśli nie jest to coś, czego szukasz, " B "(początek), jeśli jest to początek adresu, I " I " dla wszystkich kolejnych słów (lub numery lub cokolwiek) w adresie.

Drugim krokiem jest zastanowienie się, jak chcesz ocenić swój sukces. Czy ważne jest, abyś odkrył większą część adresu, czy też musisz dokładnie wiedzieć, co to jest (kod pocztowy, Ulica lub miasto itp.). Spowoduje to zmianę tego, co liczysz jako błąd.

Jeśli chcesz, aby twój rozpoznawacz nazwanych jednostek działał dobrze, musisz dobrze znać swoje dane i zdecydować się na najlepsze narzędzie do tego zadania. Może to być seria wyrażenia regularne z pewnymi zasadami łączenia wyników. Spodziewam się, że będziesz w stanie znaleźć większość danych za pomocą stosunkowo prostych programów. Gdy masz coś prostego, co działa, sprawdzasz fałszywe pozytywy (rzeczy, które okazały się nie być rzeczą, której szukałeś) i fałszywe negatywy (rzeczy, które przegapiłeś) i szukasz wzorców. Jeśli widzisz coś, co możesz łatwo naprawić, wypróbuj to. Ogromną zaletą regex jest to, że o wiele łatwiej jest nie tylko rozpoznać coś jako część adresu, ale także wykryć, która to część.

Jeśli chcesz wyjść poza to, może się okazać, że wiele metod NLP nie działa dobrze na Twoich danych, ponieważ "przetwarzanie języka naturalnego" zwykle wymaga czegoś, co wygląda jak (zgadłeś) język naturalny, aby rozpoznać, czym coś jest.

Alternatywnie, ponieważ możesz zobaczyć to jako problem chunkingu, możesz użyć maksimum entropii modeli Markowa. Wykorzystuje prawdopodobieństwo przejścia z jednego typu word to another to chunk text into "part of an address" and "not part of an address", in this case.

Powodzenia!

 3
Author: marianne,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-03-02 16:58:07

Proponuję spojrzeć na pole ekstrakcji informacji . Wiele osób bada, jak zrobić dokładnie to, o co prosisz. Istnieją pewne techniki ekstrakcji informacji, które są oparte na uczeniu maszynowym, niektóre techniki, które nie są oparte na uczeniu maszynowym.

Trudno komentować dalej, nie patrząc na przykłady przedstawiające problem, który chcesz rozwiązać (jak wygląda adres pocztowy w języku czeskim?).

 2
Author: carlosdc,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-11-12 00:17:46

Podejście musi być nadzorowanym algorytmem uczenia się (zazwyczaj dają one znacznie lepsze wyniki niż metody nienadzorowane lub częściowo nadzorowane). Zauważ również, że musisz zasadniczo wyodrębnić fragmenty tekstu. Intuicyjnie, Twój algorytm musi powiedzieć coś w stylu: "od tego znaku, przez następne trzy linie, jest adres pocztowy".

Uważam, że naturalnym sposobem podejścia do tego będzie połączenie słów i znaków na poziomie N-gramowych modeli językowych. Modelarstwo sama w sobie może być szalenie wyrafinowana. Jak zauważył mcstar, Cross Validated jest lepszym miejscem do zapoznania się z tymi szczegółami.

 2
Author: Chthonic Project,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-04-13 12:44:14

Z tego, co wiem, istnieją dwa sposoby wykonania tego zadania przy użyciu podejścia uczenia maszynowego.

1.Wykorzystanie wizji komputerowej do szkolenia modelu, a następnie wyodrębnienia treści na podstawie Twojego przypadku użycia, zostało to już zaimplementowane przez diffbot.com. i nie otworzyli swojego rozwiązania.

2.Innym sposobem obejścia tego problemu jest użycie nadzorowanego uczenia maszynowego do szkolenia binary classifier w celu sklasyfikowania zawartości vs boilerplate, a następnie wyodrębnienia zawartości. Takie podejście jest używany w dragnet. i inne badania w tej dziedzinie. Możesz spojrzeć na porównanie benchmarków wśród różnych technik ekstrakcji treści.

 2
Author: Nitin Panwar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-02-28 08:34:51

Zbudowałem rozwiązanie dokładnie na to. Moim celem było wydobycie wszystkich informacji związanych z konkursami dostępnych w Internecie. Użyłem poprawki. To, co zrobiłem, to wykryłem wzór, w którym informacje są wymienione na stronach internetowych. W moim przypadku były one wymienione jeden po drugim poniżej kolejności, Wykryłem to za pomocą znaczników tabeli html i uzyskałem informacje związane z konkursy.

Chociaż jest to dobre rozwiązanie, działa dla niektórych stron, a dla innych tak samo kod nie zadziała. Ale musisz tylko zmienić niektóre parametry w tym samym kodzie, aby to działało.

 1
Author: Harsh Gupta,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-03-02 13:37:30