Ďakujem za zaujímavý článok. Práve riešim niečo podobné v php - porovnanie dvoch reťazcov. Mám text v niekoľkých verziách a potrebujem zistiť čo pribudlo, čo ubudlo, čo sa zmenilo medzi dvoma verziami. Nepotrebujem ani tak mieru zhody, len vyznačiť zmeny. Viete mi poradiť nejaký dobrý tip, kde by som sa dozvedel k tejto téme viac?
Názory k článku
Jak na přelkepy?
Re: Porovananie dvoch reťazcov
celé vláknona text je nejlepsi:
http://en.wikipedia.org/wiki/Diff
snad to pomuze.
Re: Porovananie dvoch reťazcov
celé vláknoale diff vypisuje len rozdielne riadky nie? Sa mi zdá, že na klasický text to nie je vhodné. Lebo odstavce môžu byť dlhé aj niekoľko riadkov a ENTER je až na konci. Takže potom mi to označí celý odstavec, čo môže byť aj cez 10 riadkov, ale ak je rozdiel len jedno slovíčko, tak to je veľmi neprehľadné. Alebo sa dá diff nastaviť aj tak, že bude napríklad porovnávať nie konce riadkov, ale medzery?
Re: Porovananie dvoch reťazcov
celé vláknoDiff je váš kamarád. Určitě existuje i implementace pro PHP.
Re: Porovananie dvoch reťazcov
celé vláknoVäčšina wiki enginov dokáže zobrazovať históriu zmien. Časť z nich je zároveň v PHP a open-source. Takže by som si vybral jeden zo zoznamu:
http://en.wikipedia.org/wiki/Comparison_of_wiki_software
a začal ho pitvať.
Re: Porovananie dvoch reťazcov
celé vláknoJednoduché použití a výsledek značně uspokojující. http://www.raymondhill.net/blog/?p=441
Levenshtein a transpozice
celé vláknoZmíněnou slabinu Levenshteinova algoritmu řeší "rozšířený Levenshtein", kde se za jednu opravu počítá transpozice dvou po sobě jdoucích znaků.
Prilisna casova narocnost
celé vláknoTak jak to autor popisuje se to da pouzit jen, pokud jsou slova omezena na nejakou malou mnozinu z DB.
V praxi pro volny text se IMHO pouziva to, ze kdyz slovo neni ve slovniku, hleda se shoda se slovnikem pro jednoznakove zmeny daneho slova (pripadne viceznakove/prehozeni dvou po sobe jdoucich pismen atd.). Je to casove nejefektivnejsi.
Ale cela veda je za tim, jak z moznych oprav vybrat tu nejpravdepodobnejsi (idealne pouzit bigramy, ale to, kvuli jejich velikosti, lze jen na serverech, nikoliv napr. v mobilu).
Opravy v iOS
celé vláknoZ opravy překlepů v iOS mám pocit, že bere v úvahu i vzdálenost mezi písmeny na klávesnici. Nemáte někdo tento algoritmus trochu více prozkoumán?
How to Write a Spelling Corrector
celé vláknoPokud se chcete podívat na jednoduchou (méně než 30 řádků kódu) kompletní implementaci spellcheckeru v Pythonu, můžete zkusit http://norvig.com/spell-correct.html .
Co se tyce googlu tak mam dojem ze oni nepouzivaji zadny zvlastni algoritmus (v prvnim priblizeni).
Dalaji to statisticky. Maji obrovskou zakladnu uzivatelu. Pokdu uzivatel udela preklep, nevybere si z vysledku (nikam dal neklikne) ale misto toho znovu zada slovo (tentokrat uz spravne).
Takze co se deje je ze k danym preklepum prirazuji to na co po dalsim vyhledavani uzivatel kliknul.
Aby to skutecne fungovalo musi to byt bezpochyby hodne promakane (tj. spoustu chytrych algoritmu), nicmene v zaklade delaji jenom tu statistiku.