Forum:Epopeja linkowa

Z Nonsensopedii, polskiej encyklopedii humoru
Przejdź do nawigacji Przejdź do wyszukiwania

Część druga epopei linkowej, zamierzam to już kontynuować w tym wątku, żeby bajzlu za bardzo nie robić. To kontynuacja sprawy stąd. Od razu zaznaczam, że to porumoblog długoterminowy, to się będzie ciągnąć.

8 sierpnia 2019 – zaawansowane linkujące v1[edytuj]

Kto czyta logi z kanału, ten wie o co chodzi. Generalnie "wpadłem" na pomysł napisania rozszerzenia, które śledziłoby linkujące w tekście (te, o których było ostatnie porum). Piszę "wpadłem", bo tak naprawdę pomysł na tę funkcjonalność nie jest nowy i wikipedyści się o to pultają od 2005? A potem jeszcze i jeszcze raz. Nope, Wikimedia nie ma czasu, bo przecież <pięciominutowe zrzędzenie na Wikimedię wycięte z litości dla czytelnika>.

W każdym razie wkurzyłem się i coś wyklepałem, jest już od wczorajszego wieczora na Nonsie i yyy powinno działać. W pasku bocznym po kliknięciu w Linkujące powinno was przenieść do nieco zmienionej wersji tej strony specjalnej (konkretnie: Specjalna:Zaawansowane linkujące), gdzie jest parę nowych bajerów. Po pierwsze strony, które posiadają link bezpośredni do strony badanej są oznaczone na liście znacznikiem (link bezpośredni). Ponadto w filtrach można zaznaczyć opcję żeby pokazywało tylko linki bezpośrednie. Czy to działa? Yyy, powinno, chociaż szczerze to to jest wieża z taśmy klejącej ulypiona i pewnie jest masa przypadków że nie będzie działać. Na pewno nie działa dla szablonu {{kl}}, tego nie udało mi się zaimplementować przy ograniczeniach parsera MW.

Uwaga: techniczny bełkot. Założeniem rozszerzenia było wpięcie się w parser i przechwytywanie informacji o linkach podczas przechodzenia po drzewie DOM, co okazuje się dość trudne, bo takie hooki po prostu nie istnieją. Jedynym rozwiązaniem byłoby właściwie przepisanie parsera na nowo, a to coś czego nikt o zdrowych zmysłach się nie podejmie. Obecne rozwiązanie to taki trochę ulep, który trochę hackowo podparsowuje tekst, trochę wywołuje funkcji parsera, po czym niezdarnie po sobie sprząta, także to może wybuchnąć w każdym momencie i zapewne wybuchnie. Nie wiem też jak zrobić wyjątki typu szablon Kl, z tego co rozumiem budowę parsera to graniczyłoby to z niemożliwością. W każdym razie wpadłem na inny pomysł: skorzystanie z Parsoida. Parsoid to takie dziwne coś co powstało na potrzeby Visual Editora (he) i to jest niby-parser MW, ale dodatkowo w wypluwanym html-u dorzuca informacje o tym, jakiemu obiektowi w wikitekście odpowiada dany tag HTML. Dla mnie – idealnie. Coś takiego pozwoliłoby na zbudowanie drzewa transkluzji z linkami, tak porządnie i solidnie, bez certolenia się z badziewiem i obaw że to eksploduje. Coś jak tutaj proponowali.

Koniec technicznego bełkotu. Także no, jak znajdę trochę wolnego czasu to to przepiszę, będzie lepsze, fajniejsze i w ogóle. Póki co można używać tego co jest, ale nie daję na to żadnej gwarancji, bo bym zbankrutował po pięciu minutach.

Z dalszych planów mam jeszcze jeden pomysł na fajny bajer, taki z pokerem i kurtyzanami w zestawie. To będzie programik (odpalany na kompie, nie zamierzam marnować czasu na męczenie się z javascriptem), który będzie sugerował miejsca, gdzie można dodać link do danej strony. Magicznie.

  1. Użytkownik podaje tytuł strony, dajmy na to Kot.
  2. Program wyciąga zza pazuchy słownik gramatyczny języka polskiego i odmienia tytuł przez przypadki i liczby: kot, kota, yyy jaktoszło... koty, kotów itd.
  3. Użytkownik sprawdza czy program nie zrobił babola (niektóre słowa mogą się odmieniać na różne sposoby zależnie od znaczenia) i ew. nanosi po poprawki, po czym wdusza guzior SZUKAJ.
  4. Program szuka na Nonsie tytułu tejże strony w treści wszystkich stron, we wszystkich liczbach i przypadkach.
  5. Program zwraca użytkownikowi strony, na których można wstawić taki link, pokazując gdzie w tekście to jest i dając link do strony.

Taki bajer. Ale to jak wyklepię porządnie to rozszerzenie i będę miał czas, może trochę zejść. Aha, dodatkowo program ma sprytnie eliminować z wyników strony, które już tu bezpośrednio linkują, przy pomocy tego rozszerzenia o którym wcześniej było. No i parę innych usprawnień.

Pomysł dodatkowy spisany coby nie zaginął: niech program sam wstawi link w odpowiednim miejscu artykułu i pokaże użytkownikowi diffa do zaakceptowania/poprawienia/wywalenia. Ostrzyciel | Dyskusja 17:14, 9 sie 2019 (CEST)

Aha, co do statystyk – faktycznie mogły być trochę wypaczone przez branie pod uwagę ujednoznaczeń i parę innych rzeczy. Jak już wyklepię porządnie rozszerzenie od śledzenia linkujących, to przygotuję staty od nowa, tym razem porządne i z gwarancją zgodności. Ostrzyciel | Dyskusja 11:20, 8 sie 2019 (CEST)

Mały update: musiałem wyłączyć rozszerzenie, bo w obecnej formie kolidowało z DPL-em. W sumie do przewidzenia, tak się kończy grzebanie głęboko w bebechach parsera. Druga wersja powinna być bezkolizyjna :) Ostrzyciel | Dyskusja 22:55, 10 sie 2019 (CEST)

12 sierpnia 2019 – zaawansowane linkujące v2[edytuj]

Trzy dni klepania na dwie zmiany nooo i jest, przepisane zupełnie od zera, powinno jakoś działać. Wiem, że są jakieś małe przypadki, że będzie się psuło, ale nie wiem na ile będą realnie występować w rzeczywistości. Jak znajdziecie jakieś bugi(-ługi) to zgłaszajcie.

Dobra, to tak. Powtórnie w sidebarze link do linkujących został zastąpiony nieco innym, zapraszam na Specjalna:Zaawansowane linkujące. Tym razem mam trochę więcej informacji o tym jak linki występują w tekście, więc całość jest zaprezentowana w postaci minidrzewka. Przykład: w artykule Eudoksja znajduje się w tekście link do arta Praskowia. W artykule Wasylisa znajduje się navbox Agafia, w którym to navboksie znajduje się link do strony Praskowia. Co zobaczymy gdy wejdziemy w Specjalna:Zaawansowane linkujące/Praskowia?

  • Eudoksja
  • Agafia (przez szablon)
    • Wasylisa

Takie czary. Rozszerzenie grupuje linki według szablonów, przez jakie dane linki są transkludowane. Dodatkowo można przefiltrować to tak, żeby pokazywało tylko linki bezpośrednie (bez szablonu pośredniczącego). Uwagi:

  • Dodatkowo jest magiczne słowo __DIRECTLINK__, które sprawia, że transkluzja przez dany szablon jest pomijana w zestawieniu linkujących. Dobrym przykładem jest szablon {{Kl}}, on ma to włączone, bo jest po prostu linkiem.
  • Drzewo transkluzji jest ograniczone do głębokości 1, słownie jeden. Raz że to znacznie upraszcza kod, a dwa że Parsoid i tak na bardziej złożone cuda nie pozwala. Wystarczy dla zdecydowanej większości zastosowań.
  • Filtrowanie linkujących może być nieco koślawe, to się wyklepie.
  • Rozszerzenie nie śledzi linków zewnętrznych prowadzących do Nonsy. Oznacza to na przykład, że nie śledzi linków w Drogówce, bo wszystkie korzystają z linków zewnętrznych. Pracuję nad tym, żeby to poprawić.
  • W widoku linkujących brane są pod uwagę przekierowania, ale niezbyt się wyświetlają. Bez paniki, to działa, jeno wymaga troszkę klepania.
  • Rozszerzenie bierze pod uwagę kontekst szablonu, czyli jego argumenty i inne pierdoły. Także to będzie działać dla znacznie bardziej złożonych przypadków niż tylko navboksy.
  • Więcej bajerów nadchodzi! Jak tylko znajdę czas.

Ostrzyciel | Dyskusja 00:11, 12 sie 2019 (CEST)

Poprawka: przekierowania nie działają jednak, to się wyklepie. Działają za to linki zewnętrzne, ale to najpierw musi się przemielić. Ostrzyciel | Dyskusja 11:43, 12 sie 2019 (CEST)

I naprawione. Zarówno przekierowania jak i linki zewnętrzne powinny działać ślicznie. Puszczę teraz odbudowę linków, to pewnie będzie się mielić do późnego wieczora, także do tego czasu mogą się pokazywać dane nieuwzględniające tego. Ostrzyciel | Dyskusja 12:55, 12 sie 2019 (CEST)
Wszystkie linki powinny już być w bazie, zewnętrzne, przekierowania, dzikie węże też. Poprawiłem też stronicowanie na stronie z linkującymi. Teraz robię sobie przerwę (i tak idę na urlop w piątek), potem wrócę do tego. Ostrzyciel | Dyskusja 21:23, 12 sie 2019 (CEST)
Program dalej jest planowany? Polskacafe 17:09:38, sie 27, 2019 (CEST)
Tak? Przecież byłem na urlopie przez ostatnich kilkanaście dni. Ostrzyciel | Dyskusja 17:18, 27 sie 2019 (CEST)
To nie jest sugestia że się ociągasz tylko chęć upewnienia się. Napisałeś że nie chce ci się męczyć z JSem, no jak będzie to gotowe a mi się będzie chciało to zawsze ja się mogę pomęczyć, choćby dla sportu. Polskacafe 19:27:43, sie 27, 2019 (CEST)

28 sierpnia – strony specjalne[edytuj]

Poprawiłem parę bugów i dodałem kilka nowych ficzerów. Powinny działać jako-tako, ale dla pewności puszczę odbudowę linków jeszcze, więc dopiero jutro rano wyniki będą na 100% pewne.

Na razie tyle, wracam do klepania w klawiaturę. Ostrzyciel | Dyskusja 13:07, 28 sie 2019 (CEST)

1 września – ujednoznacznienia[edytuj]

Kolejna rzecz, niby pierdoła, a jednak warto się nią zająć. Ujednoznacznienia nie są normalnymi stronami, dlatego też linki z nich nie powinny być liczone na równi z innymi linkami.

Przy okazji – podniosłem limity długości raportów stron specjalnych do 10 000 rekordów. Teraz mieszczą się na nich wszystkie osierocone (osieroconych wg linków bezpośrednich ze stron w przestrzeniach kreatywnych jest w tym momencie 1784).

Next up: przeliczę statystyki od nowa i biorę się za klepanie narzędzia do linkowania. Ostrzyciel | Dyskusja 17:18, 1 wrz 2019 (CEST)

Update: usunąłem błąd, który powodował, że linki do stron z niektórymi znakami specjalnymi w tytule nie były poprawnie indeksowane. Zapuściłem odbudowę linków, do północy powinno być naprawione. Ostrzyciel | Dyskusja 11:07, 2 wrz 2019 (CEST)
Aha, zrobiłem stronę Pomocy która to wszystko opisuje, będę tam wrzucał opisy wszystkich kolejnych ficzerów. Ostrzyciel | Dyskusja 12:11, 2 wrz 2019 (CEST)

9 września – zaawansowane linkujące v3[edytuj]

Przepisałem całość odpowiedzialną za znajdowanie linków na stronie i dodawanie ich do bazy. Teraz wszystko powinno być znacznie dokładniejsze, odporniejsze i szybsze. Tradycyjnie zapuściłem odbudowę linków, efekty będzie widać rano.

<techniczny bełkot>
O ile wcześniej korzystało to z tego przeklętego Parsoida, czyli de facto parsowało każdą stronę dwa razy, tak teraz wpina się głęboko w parser MediaWiki (przeklęte ustrojstwo) i znajduje te linki podczas preparsowania. Oczywiście obecnie nie ma jak się tak wpiąć w MediaWiki, więc musiałem dodać do core dwa nowe hooki (task z odpowiednim paczem na phabricatorze wikimedii), także jest szansa, że te hooki wejdą do core wraz z 1.34. Tymczasem sportowałem pacza na nasze 1.33 i rozszerzenie hula jak marzenie. Odświeżanie linków powinno działać szybciej, no i zwolniło się nieco ramu i procesora na serwerze przez brak Parsoida.
</techniczny bełkot>

Ostrzyciel | Dyskusja 17:49, 9 wrz 2019 (CEST)

Dobra, parę rzeczy się jednak rozjechało, rozszerzenie wymaga więcej rzeźbienia. Się wyklepie. Ostrzyciel | Dyskusja 19:08, 9 wrz 2019 (CEST)
Udało się to wyklepać, do rana linki powinny hulać i w ogóle. Ostrzyciel | Dyskusja 21:55, 9 wrz 2019 (CEST)

12 września – statystyki po raz drugi[edytuj]

Poprzednie porum ze statami, na bazie którego w ogóle powstał ten wątek, miało ze swoimi danymi kilka problemów. Przede wszystkim sposób indeksowania linków był bardzo niedoskonały i brał/nie brał pod uwagę różnych mających spory wpływ na wynik rzeczy. Takoż wypisuję różnice:

  • Staty tym razem to po prostu wynik zapytania SQL bezpośrednio do bazy danych Nonsy, do tabeli ab_links (dodanej przez nasze magiczne rozszerzenie od linkujących), także wyniki pokrywają się 1:1 z tym, co widzicie na Specjalna:Zaawansowane linkujące.
  • Odliczyłem ujednoznacznienia, zarówno linki z nich, jak i linki do nich.
  • Przekierowania są oczywiście brane pod uwagę.
  • Liczyłem tylko linki z przestrzeni głównej do przestrzeni głównej. Poradniki, Nonźródła, Gra, Cytaty, Słownik i cała reszta nie znalazły się w statystykach.

Wyniki są poniżej w tabelce, jak ktoś nie wie co tu się dzieje, to odsyłam do wyżej linkowanego forum, tam jest wyjaśnione. Surówka z danych tutaj.

Linki w tekście z głównej
Nielinkowane 687
1 link 1088
2–3 linki 1745
4–10 linków 2598
11–50 linków 2260
51–100 linków 339
>100 linków 162

Wprawne oko zauważy, że te wyniki nie różnią się jakoś bardzo drastycznie od poprzednio prezentowanych, oprócz artów nielinkowanych zupełnie. Ich ubyło, sporo, to głównie przez odliczenie ujednoznacznień i lepsze indeksowanie linków. Nadal, wnioski są te same, także nie będę się powtarzał. Ciekawą, nierozwiązaną kwestią pozostaje zadane przez Amoniaka pytanie ile jest par artykułów, które linkują tylko do siebie nawzajem. To… dłuższa historia i temat na grubszą analizę grafu linków, może później. Szczerze też przyznam, że na dyskretnej głównie spałem, więc musiałbym najpierw zasięgnąć języka jak w ogóle taką analizę zrobić.

Next up: kombajn do walki z nielinkozą. Ostrzyciel | Dyskusja 21:06, 12 wrz 2019 (CEST)