Generator tekstu

28 czerwca 2008

Chyba najwyższa pora żeby napisać kilka słów o projekcie, który kosztował mnie trochę pracy i dużo cierpliwości :P

Od jakiegoś czasu w światku SEO pojawia się mnóstwo mniej lub bardziej udanych generatorów tekstu/stron. Nie jest tajemnicą, że dobre efekty w pozycjonowaniu osiąga ten kto ma odpowiednio duże zaplecze. Jednak potrzeby są ogromne dlatego marzeniem każdego pozycjonera jest posiadać narzędzie, które maksymalnie ułatwi stawianie kolejnych witryn.

Niestety wszystkie te generatory są mało zaawansowane. Najpopularniejsze metody to użycie synonimów, mieszanie zdań (z wcześniej przez nas przyszykowanego contentu lub automatycznie pobranego z Internetu) czy łańcuchy Markova. Na końcu można jeszcze wspomnieć o tłumaczeniach.

Synonimy to najprostszy sposób. Jakieś to zalety ma ale metodę uważam za bardzo prymitywną. Można tego używać jako dodatek ale nie jako podstawę generatora.

Mieszanie zdań z własnego contentu to też nic rewolucyjnego. Co prawda daje tematyczny tekst ale wymaga od nas własnoręcznego zbierania treści co jest kłopotliwe, czasochłonne i ogólnie nas ogranicza. Rozwinięciem tej metody jest automatyczne pobieranie i czyszczenie tekstu z Internetu. To całkiem sensowny sposób jednak także nie ograniczałbym się tylko do jego użycia a raczej połączył z procesem Markova.

Łańcuchy Markova to ciekawy sposób jednak ich zaimplementowanie w ogólnodostępnych narzędziach pozostawia wiele do życzenia :/ Przeważnie wszystkie rozwiązania wymagają od nas własnoręcznego zebrania contentu. Potem uruchamiamy proces, program/skrypt obrabia tekst i wypluwa rozwiązanie. Jednak aby ta metoda dała jakieś sensowne rezultaty to treści do obróbki musi być bardzo dużo – im więcej tym lepiej. Z drugiej strony dostępne w tej chwili narzędzia nie radzą sobie w momencie gdy dostarczymy im dużo tekstu ponieważ są zbyt prymitywne ;) Oparte na plikach tekstowych, nigdzie nie zapisują rezultatów „nauki” itd.

Niektórzy do generowania treści używają jeszcze programów tłumaczy. Tłumaczą np. tekst z polskiego na angielski, następnie w drugą stronę i w ten sposób uzyskują zmieniony tekst. Niestety kto widział wyniki takich tłumaczeń ten przyzna, że nie wygląda to najlepiej :)

Mi marzyło się narzędzie, które będzie za każdym razem generowało inną treść, będzie korzystało z wewnętrznej bazy i przede wszystkim, będzie szybkie.

Efekty mojej pracy wcale nie są powalające ;) Sam się zastanawiam czy tego typu rozwiązanie może być przydatne dlatego chętnie wysłucham wszystkich uwag osób doświadczonych w pozycjonowaniu. Uważam jednak, że narzędzie jest ciekawe i warto je dalej rozwijać. Nie kosztowało mnie ono zbyt wiele pracy, raczej dużo myślenia ;) No i mnóstwo czasu ponieważ obróbka tak gigantycznych ilości tekstu trwała dłuuuuugo :/

No dobrze, to może podam teraz kilka liczb.

Do „nauki” posłużyło mi 652 607 różnej długości i różnego pochodzenia artykułów. Niektóre na kilka zdań, inne to wypracowania na wiele stron A4. Łączna ich objętość przed obróbką (całe strony ze wszystkimi znacznikami HTML i innymi niepotrzebnymi treściami) to 36,3 GB. Niestety nie wiem ile content zajmował po oczyszczeniu bo na bieżąco usuwałem już „przerobione” pliki i nie zapisywałem sobie ich objętości a teraz gdybym chciał to ponownie oczyścić to znowu by to pewnie zajęło z miesiąc ;)

Następnie powyższy content posłużył mi do „nauki”. Oczywiście przy takich ilościach trzeba było oprzeć wszystko na bazie danych (zdobyłem nieocenioną wiedzę na temat konfiguracji MySQL, optymalizacji budowy tabel i zapytań :) ).

Efektem moich prac były dwie tabele. Jedna z listą wyrazów, druga z tym czego skrypt zdołał się nauczyć. Wszystkie poniższe objętości tabel są podane razem z indeksami (których oczywiście użyłem do przyspieszenia działania bazy danych), które ważą sporo ale na czas np. przenoszenia danych z jednego komputera na drugi można je usunąć i potem wygenerować na nowo.

Tak więc pierwsza tabela to 278 306 rekordów o objętości 103,5 MB. Druga to 105 072 377 rekordów, które razem zajmują 3 GB w bazie danych ;)

Niestety to jeszcze nie wszystko :P Chociaż konstrukcja bazy i moje skrypty były gotowe do rozpoczęcia generowania tekstu to wydajność pozostawiała wiele do życzenia :( Zapytania do bazy danych były zbyt skomplikowane i ich wykonanie przy takiej ilości danych zajmowało mnóstwo czasu.

Następnym etapem była optymalizacja zarówno bazy jak i zapytań a przy okazji wywalenie zbędnych informacji z tabel. Efekt to trzy tabele. Pierwsza z wyrazami nie uległa zmianom, dwie pozostałe mają 88 311 561 i 2 454 706 rekordów oraz ważą odpowiednio 2,4 GB i 79,1 MB.

To był koniec ;) Ściągnięcie contentu z sieci, jego oczyszczenie, obróbka, następnie nauka i w końcu optymalizacja wszystkiego zajęła kilka miesięcy pracy komputera bez przerwy :) Na szczęście nie wymagało to ode mnie wielu poświęceń, inaczej bym się na to nie zdecydował :) Przeznaczyłem do tego drugi komputer, który i tak stał bezczynnie, napisanie samych skryptów do tego wszystkiego zajęło mi mało czasu a potem codziennie raz czy dwa razy sprawdzałem jak idą postępy :)

Efekty są… hmm… nie wiem, sami oceńcie ;) Na pewno jest to tekst unikalny, na pewno generuje się stosunkowo szybko i na pewno użycie generatora jest praktycznie nieograniczone (bo nikt z nas nie wygeneruje tyle artykułów żeby zacząć się martwić o powtarzalność).

Niestety wygenerowane teksty nie mają zbyt dużego sensu :D Użyta przeze mnie metoda sprawia, że gdy wylosujemy jakikolwiek wyraz z wygenerowanego tekstu a następnie spojrzymy na trzy następne wyrazy to taki ciąg czterech wyrazów powinien mieć sens. Jeżeli nie ma to znaczy, że były jakieś błędy w tekście wejściowym, który posłużył do nauki. Niestety nie chciało mi się ręcznie moderować 652 607 artykułów pod względem gramatyki, stylistyki, ortografii itd. :P

Myślę, że moja metoda wcale nie jest taka głupia ale żeby uzyskać naprawdę zadowalające wyniki musielibyśmy nakarmić program naprawdę ogromnymi ilościami tekstu :/ A cała moja zabawa z tym generatorem i tak trwała wystarczająco długo, nie mam na to kolejnych pięciu lat :P

No dobra, najwyższa pora żeby zaprezentować wyniki. Pokaże Wam trzy przykłady.

Pierwszy, najdłuższy tekst generował się 9,7s. Ma 747 słów co odpowiada 5 320 znakom.

Na drugi tekst o średniej długości czekałem 5,2s. Generator wypluł 393 wyrazy co dało 2 652 znaki.

Trzeci tekst uzyskałem po 1,8s. Jest to 136 wyrazów, które łącznie mają 912 znaków.

Podczas generowania trzeba podać ile wygenerowany tekst ma mieć mniej więcej wyrazów. Przeważnie wynik będzie o kilka wyrazów dłuższy bo generator po przekroczeniu limitu musi jeszcze dokończyć ostatnie zdanie.

Bardziej przyspieszyć już tego nie potrafię :) Zapytania do bazy danych działają bardzo szybko jednak każdy wyraz to od jednego do trzech zapytań więc łącznie troszkę to trwa. Z drugiej strony przy tylu milionach rekordów to chyba całkiem niezły wynik ;)

Dla zainteresowanych podam, że generator jest napisany w PHP i oparty, o czym wcześniej wspominałem, o bazę danych MySQL. Z racji rozmiarów tabel najsensowniejsze rozwiązanie to uruchamianie generatora na localhost. Skrypt wypluwa czysty blok tekstu i tylko od nas zależy co dalej z nim zrobimy. Gotowy tekst można zapisać np. do pliku lub do bazy danych (np. zewnętrznej bazy już na naszym serwerze).

Nim zaczniecie komentować chciałbym jeszcze napisać, że to nie wszystko co sobie zaplanowałem.

Po pierwsze, chciałbym w wolnej chwili napisać małą funkcję, która doda formatowanie do tekstu. Czyli automatycznie potworzy akapity, pogrubi co trzeba itd. Żeby ten tekst wyglądał bardziej przyjaźnie :)

Po drugie, jeżeli chcielibyśmy użyć generatora do generowania stron to wypadałoby napisać też coś co czasami wyciągnie jakieś zdjęcie z Internetu, jakiś filmik z youtube itp. żeby generowane teksty wyglądały jeszcze bardziej naturalnie.

Po trzecie, wypadałoby pokusić się o zaimplementowanie jakiejś tematyczności :) I tu wracam do jednej z metod, które opisywałem na początku tego tekstu. Skrypt po otrzymaniu interesującej nas frazy pobierałby wyniki np. z google, parsował odpowiednie strony, wyciągał odpowiednie zdania i wklejał w losowe miejsca do wcześniej wygenerowanego tekstu. Nic trudnego :) Drugi sposób to już wewnętrzny mechanizm samego generatora. W bazie jest zapisanych prawie 2,7 mln słów więc na pewno znajdziemy tam większość interesujących nas wyrazów/fraz. Należałoby generować zdania w których użyte byłyby te wyrazy. Jest to do zrobienia ;)

No dobrze, to byłoby chyba na tyle ;) Czekam na jakąś konstruktywną krytykę :) Umieszczę temat na forum PiO, zobaczymy co na to wszystko powiedzą prawdziwi wyjadacze ;) Ja w wolnych chwilach zamierzam rozwijać moje narzędzie. W przyszłości wypadałoby też zastanowić się nad stworzeniem samodzielnego programu dla wygody i szybkości działania. Nie będzie to trudne bo wszystko uprościłem do maksimum.

PS
Uprzedzając pytania o sposób działania zdradzę, że skrypt oparty jest o trochę rozwiniętą metodę użycia łańcuchów Markova. Szczególną uwagę podczas „nauki” programu poświęciłem położeniu wyrazów. Skrypt zapamiętał, które wyrazy były na początku zdania, które na końcu a które w środku i podczas generowania tekstu wykorzystuje tą wiedzę.

PS 2
Zapomniałem dodać, że użyta przeze mnie metoda pozwala na zbudowanie generatora tekstu w dowolnym języku. Sądzę, że rezultaty np. dla angielskiego byłyby trochę lepsze bo to bardziej elastyczny język. Niestety przy każdym nowym języku trzeba przechodzić od nowa przez cały proces czyli ściąganie artykułów, czyszczenie, nauka itd. Narzędzia do tego mam ale czasu tych operacji nie da się skrócić.

Dodaj komentarz

28 odpowiedzi dla tego wpisu

  1. Bart napisał:

    Kapitalny wpis. Sam próbowałem się z łańcuchami Markova pobawić, niestety już na początku nie starczyło zapału. Ale piszesz o programowaniu w taki sposób, że chęci same wracają, więc chyba jeszcze się z tym kiedyś pobawię :D

  2. SirZooro napisał:

    Pojedyncze zdania wyglądają w miarę sensownie, ale całość to tragedia, Proponuję aby spróbować uczyć ten algorytm tylko i wyłącznie na tekstach tematycznych – wtedy wyniki może też powinny być tematyczne, a może nawet da się to czytać :)

  3. MariuszT napisał:

    Wygenerowana treść jest pozbawiona tematyczności. Pisałem, że narzędzie wcale nie jest jeszcze skończone :) Jakby udało się wprowadzić moje pomysły na tematyczność to myślę, że wyglądałoby to dużo lepiej.

  4. Devel napisał:

    Jak dla mnie to bomba :) Nieograniczone źródło contentu mmmhhhmmm marzenie :P Za ile byś chciał sprzedać? :P Kiedy dorobisz te dodatki o których piszesz pod koniec?

  5. kixner napisał:

    Zawsze mozna zastosowac inna architekture do generowania. Na przyklad zrobic kod rownolegly i skompilowac na x64 i 2 rdzenie. Bo PS3 ze swoim CELLem to chyba tylko w sferze marzen, ale kopa by dostalo niesamowitego xD

  6. MariuszT napisał:

    No wiesz, gdybym to „produkował” na dużą skalę to pewnie szukałbym lepszych rozwiązań. Ale póki co to jest tylko eksperyment, który w jakiejś tam nieokreślonej przyszłości będę chciał wykorzystać :)

  7. Gibon napisał:

    Witam, i jak się potoczyły losy generatora?

  8. MariuszT napisał:

    Generator sobie leży na dysku :) Zoptymalizowałem go ekstremalnie ale nie dodawałem nowych funkcjonalności, brak czasu. Ostatnio się ktoś do mnie zgłosił, dostał trochę wygenerowanych tekstów (chyba z tysiąc ale nie pamiętam), miał z tego zbudować zaplecze i napisać jak się to indeksuje. Do tej pory się nie odezwał, muszę do niego napisać i się zapytać jakie efekty. Teraz mam dużo innych rzeczy na głowie dlatego na pewno nie będę w nim dokonywał zmian w najbliższej przyszłości ale miło by było go potestować i sprawdzić jaka jest skuteczność generowanych przez niego artykułów.

  9. Gibon napisał:

    To jeżeli chcesz przyjmę trochę tekstu na próbę i zobaczymy co z tego wyszło.
    mail: administracja [at] omblog.pl

  10. MariuszT napisał:

    Nie ma problemu, coś tam może jeszcze dzisiaj Ci podeślę, zobaczę jak będzie z czasem bo mam trochę pracy na wieczór. Odezwę się na maila. Tysiąc artykułów myślę, że wystarczy :)

  11. mazur napisał:

    Hej,
    Chyba projekt padł, chociaż ładnie się zapowiadał. Z miłą chęcią przyjmę kilka artykułów na próbę. Zasadniczo to byłbym raczej zainteresowany zakupem generatora.
    Jakieś wakacyjne teksty Mazury , noclegi na Mazurach

    Pozdrawiam,
    mazur

  12. MariuszT napisał:

    Projekt nie padł. Przez dobre dwa lata nie miałem czasu nawet przetestować jak sprawdza się na placu boju :) Dwie osoby się zadeklarowały, że wezmą teksty, poindeksują i przedstawią mi wyniki. Teksty dostały i kontakt się urwał. Sam w końcu stworzyłem dwa portale testowe. Oba uzyskały około 50% zaindeksowanych podstron. Jeden po półtora miesiącu dostał bana, drugi stoi dalej (dwa miesiące). Ale ban to raczej moja zasługa, nie przywiązywałem zbyt dużej uwagi do tego co tam się dzieje, jak strona jest zbudowana i promowana ;) To miał być tylko tekst czy google w ogóle to łyknie.

    Nie mam czasu dalej rozwijać projektu chociaż pomysłów nie brakuje. Może kiedyś… W obecnej postaci nie wydaje mi się aby generator nadawał się do bezpośredniego tematycznego pozycjonowania ale jest idealny pod SWL’e. Można sobie nabić naprawdę wiele punktów. Teksty są unikalne więc google z przyjemnością je indeksuje, z drugiej strony są na tyle abstrakcyjne i nie dotyczą niczego konkretnego, że nie trafiają na wysokie pozycje w serpach przez co jest mniejsze ryzyko bana.

    Generator jest na sprzedaż ale na pewno nie za kilkaset złotych. Opłaca się go kupić raczej tylko firmom pozycjonerskim.

  13. mazur napisał:

    Generator jest na sprzedaż ale na pewno nie za kilkaset złotych. Opłaca się go kupić raczej tylko firmom pozycjonerskim. (?)

    To za ile ?

  14. MariuszT napisał:

    Ciężko mi go wycenić, nigdy się nad tym nie zastanawiałem. Ogrom pracy jest opisany powyżej. Ile to jest warte? Myślę, że kilka tysięcy, może kilkanaście. Zależy kto jak wycenia kilka miesięcy mojej pracy i możliwość generowania dziesiątek artykułów dziennie na zwykłym laptopie.

  15. Japomm napisał:

    A za ile byś sprzedał próbkę tego generatora…

  16. Repayen napisał:

    http://www.forum.optymalizacja.....type=posts – fajnego masz awatara na tym forum.

  17. MariuszT napisał:

    Co masz dokładnie na myśli? Chodzi Ci o jakąś paczkę artykułów? 1 artykuł (około 5tys znaków) = 1 grosz. Minimalne zamówienie 1000 artykułów (10zł).

  18. MariuszT napisał:

    Repayen, to mój standardowy awatar, którego używam na forach na których przynajmniej raz na jakiś coś pisuję.

  19. Japomm napisał:

    Mój komentarz jednak zaoowocował. Patrz: http://www.forum.optymalizacja.....8;p=688241

    Tak, chodzi mi o paczkę. Wkrótce się z Tobą skontaktuję.

  20. MariuszT napisał:

    :) Zgadza się :) Postanowiłem w końcu zrobić z generatora użytek. Wcześniej nie sprzedawałem bo sam go nie przetestowałem ale teraz już wiem, że Google te teksty indeksuje i z czystym sercem mogę je sprzedawać.

  21. Megavideo bez limitu napisał:

    Bardzo ciekawy projekt, tylko czekać, aż się rozwinie!

  22. Easy napisał:

    projekt jest ciekawy, jestem zainteresowany kupnem artykulow, ale nie moge sie dobic zadnym sposobem

  23. MariuszT napisał:

    Przyznaję, ostatnio ciężko się ze mną skontaktować. Przepraszam i obiecuję poprawę :) Odpiszę jak się tylko wyśpię.

  24. Sylwester napisał:

    Witam,
    sam rozwijam takie coś, ale w mniejszym zakresie. Napisałem prosty skrypt PHP z tablicami. Do tego używam jeszcze programu dostępnego w sieci. Efekty zadowalające. Wystarczy trochę poszperać w necie i można znaleźć gotowce, które razem dają spójną całość. O szczegółach nie będę pisał, ale nawet dla osoby mało doświadczonej, jest to do zrobienia. Gratuluję całej pracy i zapału.
    Pozdrawiam

  25. EASY napisał:

    Długo coś spisz !!!

  26. MariuszT napisał:

    LOL :D Filip, rozumiem, że nie możesz mnie zastać na skype? :P Śpię normalnie. Za to pracuję czasami do 6 rano :) Ostatnio staram się ograniczać, max do 3 rano. Więc jak pójdę spać i śpię 7 lub 8 godzin to inni myślą, że się opieprzam i mam raj… :)

  27. Comma napisał:

    Mam dla Ciebie zlecenie… http://oferia.pl/zlecenie/item.....paign=inne
    nie mogłem znaleźć innej strony, nie chciało mi się pisać maila… napisz czy Ci wyszło…::-)
    -> tarnaski.eu/automaty

  28. MariuszT napisał:

    Miałem takiego bota (do nk.pl) ale to stare czasy, nie używam i nie sprzedaję od daaawna.

Odpowiedz



Podobne wpisy: