Rastojanje uređivanja

S Vikipedije, slobodne enciklopedije

U teoriji informacija i računarstvu, rastojanje uređivanja između dve niske je broj operacija potrebnih da se jedna od njih transformiše u drugu. Rastojanje uređivanja nalazi primenu u obradi prirodnih jezika gde se automatsko ispravljanje pravopisnih grešaka vrši izborom jednog od kandidata za ispravku pogrešno napisane reči izborom reči iz rečnika koje imaju malo rastojanje uređivanja u odnosu na zadatu reč. U bioinformatici, može da se koristi za određivanje sličnosti DNK sekvenci, koji mogu da se gledaju kao niska karaktera A, C, G i T.

Različite definicije rastojanja uređivanja koriste različite skupove operacija nad niskama. Operacije Levenštajnovog rastojanja su brisanje, ubacivanje, ili zamena karaktera u niski. Pošto je to najčešća metrika, Levenštajnovno rastojanje je uobičajeno ono na šta se misli pod "Rastojanjem uređivanja". [1]

Formalna definicija i osobine[uredi | uredi izvor]

Za date dve niske i na azbuci (npr. skup ASCII karaktera), rastojanje uređivanja niski je najkraći niz operacija koje transformišu u . Jedan od najjednostavnijih skupova operacija uređivanja je definisan od strane Levenštajna 1966. godine:[2]

Ubacivanje jednog simbola. Ako je , onda ubacivanjem simbola dobijamo niz . Ovo se takođe može predstaviti kao , koristeći kao oznaku za praznu nisku.
Brisanje jednog simbola menja u ().
Zamena jednog simbola za simbol menja u ().

U Levenštajnovoj originalnoj definiciji, svaka od ovih operacija ima jediničnu cenu(osim zamene karaktera sa samim sobom što nema cenu), tako da Levenštajnova je udaljenost jednaka minimalnom broju operacija potrebnih da se transformiše u . [2]

Dodatne primitivne operacije su predlagane. Česta greška prilikom kucanja teksta je transpozicija dva susedna karaktera, formalno karakterisana kao operacija koja menja u gde . [3][4]. Kao zadatak korekcije OCR izlaza, operacije povezivanje i razdvajanje se koriste za zamenu jednog karaktera u dva i obrnuto.[4]

Druge varijante rastojanja uređivanja dobijaju se ograničavanjem seta operacija. Udaljenost najduže zajedničke podniske je udaljenost uređivanja sa ubacivanjem i brisanjem kao jedine dve operacije, obe sa jediničnom cenom. Slično, dopuštanjem samo zamene(opet po jediničnoj ceni), dobija se Hamingovo Rastojanje, koje mora biti ograničeno na niske sa istim brojem karaktera. Džaro-Vinkler rastojanje se dobija kao rastojanje uređivanja u kome je samo transpozicija dozvoljena.

Primer[uredi | uredi izvor]

Levenštajnovo rastojanje između reči "kitten" i "sitting" je 3.

  1. kitten sitten("k" zamenjeno sa "s")
  2. kitten sittin("e" zamenjeno sa "i")
  3. kitten sitteng(dodato "g")

Najduža zajednička podniska (dozvoljena samo ubacivanja i brisanja) daje rastojanje od 5.

  1. kitten itten (obrisano "k" sa nulte pozicije)
  2. itten sitten (dodato "s" na nultu poziciju)
  3. sitten sittn (obrisano "e" sa četvrte pozicije)
  4. sittn sittin (dodato na "i" četvrtu poziciju)
  5. sittin sitting (dodato na "g" šestu poziciju)

Osobine[uredi | uredi izvor]

Rastojanje uređivanja sa ne-negativnim cenama zadovoljava aksiome metrike, praveći metrički prostor niski kada su naredni uslovi zadovoljeni:

  • Svaka operacija uređivanja ima pozitivnu cenu;
  • za svaku operaciju, postoji inverzna operacija sa istom cenom.

Sa ovim osobinama metričke aksiome su zadovoljene:

, pošto svaki string može trivijalno da se transformiše u samog sebe koristeći tačno nula operacija.
, kada , pošto je neophodno izvršiti makar jednu operaciju čija cena nije 0.
po jednakosti cena svake od operacija i njihovog inverza.
Nejednakost trougla: .[5]

Levenštajnovo rastojanje i Najduža zajednička podniska sa jediničnim cenama operacija zadovoljavaju gorenavedene uslove.

Druge korisne osobine rastojanja udaljenosti jediničnih cena su:

  • Najduža zajednička podniska je gornje ograničena sumom dužina para niski.[1]
  • Najduža zajednička podniska je gornje ograničenje Levenštajnovog rastojanja.
  • Za niske iste dužine, Hamingovo rastojanje je gornja granica Levenštajnovog rastojanja.[1]

Bez obzira na cenu, naredna osobina važi za sva rastojanja uređivanja:

  • Kada i dele zajednički prefiks, ovaj prefiks ne utiče na rastojanje. Formalno, kada i , onda .[4] Ovo omogućava poboljšanje vremena izvršavanja računa vezanih za rastojanje uređivanja jer se česti prefiksi i sufiksi mogu preskočiti u linearnom vremenu.

Računanje[uredi | uredi izvor]

Prvi algoritam za računanje minimalnog rastojanja uređivanja dve niske je objavio Damarau 1964. godine.[6]

Opšti algoritam[uredi | uredi izvor]

Korišćenjem Levenštajnovih originalnih operacija, rastojanje uređivanja između i je dat kao , definisano rekurzivno:[2]

Ovaj algoritam može da se uopšti kako bi podržavao transpozicije dodavanjem dodatnog člana u rekurzivnoj klauzi za minimizaciju.[3]

Jednostavan, rekurzivni način računanja ovog problema je eksponencijalne vremenske složenosti. Tako da se uobičajeno računa pomoću algoritma dinamičkog programiranja zvanog Vagner-Fišer.[7] Nakon završetka Vagner-Fišerovog algoritma, minimalni niz operacija uređivanja može da se pročita unazad prateći operacije korišćene tokom algoritma, počevši od .

Ovaj algoritam je pripada klasi vremenske složenosti . Kada se konstruiše potpuna tabela, prostorna složenost je takođe ; ovo može da se poboljša na usled činjenice da u bilo kom trenutku, algoritmu samo trebaju 2 reda(ili dve kolone) u memoriji. Implementiranjem ove optimizacije gubi se mogućnost pamćenja samog niza operacija uređivanja. Rešenje linearne prostorne složenosti je nudi Hiršbergov Algoritam.

Poboljšani algoritmi[uredi | uredi izvor]

Ukonen je opisao nekoliko varijanti poboljšanja gorenavedenog Vagner-Fišer algoritma, jedna od kojih uzima dve niske i maksimalno rastojanje uređivanja , i vraća .[8] To uspeva računajući i skladišteći samo deo tabele u okolini dijagonale. Ovaj algoritam zahteva vreme, gde su i dužine niski. Prostorna složenost je ili , u zavisnosti od toga da li niz operacija treba da se pročita ili ne.

Primena[uredi | uredi izvor]

Rastojanje uređivanja nalazi primenu u računskoj biologiji i obradi prirodnih jezika, npr. ispravljanju pravopisnih ili OCR grešaka i traženjem približnog poklapanja niski, gde je cilj naći poklapanja za kratke niske u mnogo dužim tekstovima, u situacijama kada se mali broj razlika očekuje.

Razni algoritmi postoje za rešavanje sličnih tipova problema.

  • Hiršbergov algoritam računa optimalno poravnanje dve niske, gde je optimalnost definisana minimizovanjem rastojanja uređivanja.
  • Traženje približne niske može da se formuliše u terminima rastojanja uređivanja. Ukonenov algoritam iz 1985. uzima nisku , nazvanu uzorak, i konstantu . Onda pravi deterministički konačni automat koji pronalazi, u proizvoljnoj niski , podnisku čije je rastojanje uređivanja do najviše .[9] Sličan algoritam za traženje približne niske je bitap algoritam, takođe definisan u terminima rastojanja uređivanja.
  • Levenštajnov automat je konačni automat koji prepoznaje set niski unutar ograničenog rastojanja uređivanja fiksne referentne niske. [4]

References[uredi | uredi izvor]

  1. ^ a b v Navarro, Gonzalo (1. 03. 2001). „A guided tour to approximate string matching” (PDF). ACM Computing Surveys. 33 (1): 31—88. doi:10.1145/375360.375365. Pristupljeno 19. 03. 2015. 
  2. ^ a b v Daniel Jurafsky; James H. Martin (2014). Speech and Language Processing. Pearson Education International. str. 107–111. 
  3. ^ a b Esko Ukkonen (1983). On approximate string matching. Foundations of Computation Theory. Springer. str. 487—495. 
  4. ^ a b v g Schulz, Klaus U.; Mihov, Stoyan (2002). „Fast string correction with Levenshtein automata”. International Journal of Document Analysis and Recognition. 5 (1): 67—85. doi:10.1007/s10032-002-0082-8. CiteSeerX: 10.1.1.16.652. 
  5. ^ Lei Chen; Raymond Ng (2004). On the marriage of Lₚ-norms and edit distance. Proc. 30th Int'l Conf. on Very Large Databases (VLDB). 30. 
  6. ^ Kukich, Karen (1992). „Techniques for Automatically Correcting Words in Text” (PDF). ACM Computing Surveys. 24 (4): 377—439. doi:10.1145/146370.146380. Arhivirano iz originala (PDF) 27. 09. 2016. g. Pristupljeno 29. 05. 2016. 
  7. ^ R. Wagner; M. Fischer (1974). „The string-to-string correction problem”. J. ACM. 21: 168—178. doi:10.1145/321796.321811. 
  8. ^ „Algorithms for approximate string matching” (PDF). Information and Control. 64 (1–3): 100—118. 1985. doi:10.1016/S0019-9958(85)80046-2. 
  9. ^ Esko Ukkonen (1985). „Finding approximate patterns in strings”. J. Algorithms. 6: 132—137. doi:10.1016/0196-6774(85)90023-9. 

Spoljašnje veze[uredi | uredi izvor]