A LEVENSHTEIN TÁVOLSÁG THE LEVENSHTEIN DISTANCE



Hasonló dokumentumok
Algoritmusok és Adatszerkezetek II. utolsó előadás Beszédtechnológiai algoritmusok. (csak egy kis felszínkapargatás)

INFORMATIKAI ALAPISMERETEK

Kalapácsvetés 2016 szöveges

hiányzott szeptemberben vagy A tanuló nem hiányzott szeptemberben szöveget

3. Határozza meg és írja ki a minta szerint, hogy a forrásállományban hány kémiai elem felfedezési adatai

INFORMATIKAI ALAPISMERETEK

C# feladatgyűjtemény Kovács Emőd, Radványi Tibor, Király Roland, Hernyák Zoltán

Torna. A torna.csv UTF-8 kódolású állományban soronként egy versenyző eredményeit tároljuk. Az adatokat pontosvessző választja el egymástól.

A képernyőre írást igénylő részfeladatok eredményének megjelenítése előtt írja a képernyőre a feladat sorszámát (például: 3. feladat:)!

Mentsd el code file-t kektura.cs néven, illetve kiterjesztéssel! Másold be a kektura.csv állományt a Projects munkamappa megfelelő almappájába!

MestInt gyakorlat visszalépéses keresés

1. Alapok. Programozás II

C# feladatok gyűjteménye

4. Öröklődés. Programozás II

Programozás I. Metódusok C#-ban Egyszerű programozási tételek. Sergyán Szabolcs

PROGRAMOZÁS ALAPFELADATOK

INFORMATIKAI ALAPISMERETEK

C# nyelv alapjai. Krizsán Zoltán 1. Objektumorientált programozás C# alapokon tananyag. Általános Informatikai Tanszék Miskolci Egyetem

Objektumorientált programozás C# nyelven

Fordított és szkript nyelvek összehasonlító elemzése. Sergyán Szabolcs

1. feladat Készítse el szövegszerkesztővel, majd mentse osztály.txt néven a következő tartalmú szöveges fájlt:

BME MOGI Gépészeti informatika 4.

Objektumorientált programozás C# nyelven

Programozás II gyakorlat. 4. Öröklődés

Gelle Kitti Algoritmusok és adatszerkezetek gyakorlat - 07 Hasítótáblák

Bánsághi Anna

C#, OOP. Osztályok tervezése C#-ban

Java Programozás 11. Ea: MVC modell

BME MOGI Gépészeti informatika 5.

Programozás BMEKOKAA146. Dr. Bécsi Tamás 1. Előadás

Informatika terméktervezőknek

Objektumorientált Programozás IV.

Körkörös listák. fej. utolsó. utolsó. fej

OOP: Java 8.Gy: Abstract osztályok, interfészek

Collections. Összetett adatstruktúrák

Objektumorientált programozás C# nyelven

Objektum Orientált Programozás IV.

Java és web programozás

A feladat lényege egy felhasználói típusnak a zsák típusnak a megvalósítása.

117. AA Megoldó Alfréd AA 117.

Szoftvertervezés és -fejlesztés I.

Bánsághi Anna 2014 Bánsághi Anna 1 of 68

Számítástechnika I. BMEKOKAA152 BMEKOKAA119 Infokommunikáció I. BMEKOKAA606. Dr. Bécsi Tamás

Programozás BMEKOKAA146. Dr. Bécsi Tamás 5. előadás

11. Előadás. 11. előadás Bevezetés a lineáris programozásba

Java gyakorlat feladatai e s megolda sai ( )

Sztringkezelő függvények. A string típusú változók kezelése, használata és szerepük a feldolgozás során

GenerikusOsztály<objektumtípus> objektum = new GenerikusOsztály<objektumtípus>();

OOP: Java 11.Gy: Enumok, beágyazott osztályok. 13/1 B ITv: MAN

Elemi Alkalmazások Fejlesztése II.

I. Internetes keresési feladatok (ajánlott idő: 20 perc)

JNDI - alapok. Java Naming and Directory Interface

Adatbázis alapú rendszerek gyakorlat Adatbázis alapú alkalmazásfejlesztés Java, C# környezetben

BME MOGI Gépészeti informatika 1.

Java és web programozás

OOP I. Egyszerő algoritmusok és leírásuk. Készítette: Dr. Kotsis Domokos

Java és web programozás

9. MPI

Objektumorientált programozás C# nyelven III.

BME MOGI Gépészeti informatika 8.

Excel vagy Given-When-Then? Vagy mindkettő?

SZOFTVEREK A SORBANÁLLÁSI ELMÉLET OKTATÁSÁBAN

INFORMATIKAI ALAPISMERETEK

Java és web programozás

FATERMÉSI FOK MEGHATÁROZÁSA AZ EGÉSZÁLLOMÁNY ÁTLAGNÖVEDÉKE ALAPJÁN

Objektum elvű alkalmazások fejlesztése Kifejezés lengyel formára hozása és kiértékelése

Struktúra nélküli adatszerkezetek

Abstract osztályok és interface-ek. 7-dik gyakorlat

WCF, Entity Framework, ASP.NET, WPF 1. WCF service-t (adatbázissal Entity Framework) 2. ASP.NET kliens 3. WPF kliens

Széchenyi István Egyetem

Objektumorientált paradigma és programfejlesztés Bevezető

Java bevezet o Kab odi L aszl o Kab odi L aszl o Java bevezet o

Programozás I. Objektum-orientált programozás Stringműveletek V 1.0 ÓE-NIK-AII,

A számítástudomány alapjai. Katona Gyula Y. Számítástudományi és Információelméleti Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem

Véletlen sorozatok ellenőrzésének módszerei. dolgozat

Az osztályok csomagokba vannak rendezve, minden csomag tetszőleges. Könyvtárhierarhiát fed: Pl.: java/util/scanner.java

Programozás(A szakirány) II. beadandó feladat Farkas András HP6S15 1. csoport Veszprémi Anna / Hudoba Péter

Fordító részei. Fordító részei. Kód visszafejtés. Izsó Tamás szeptember 29. Izsó Tamás Fordító részei / 1

INFORMATIKAI ALAPISMERETEK

Pelda öröklődésre: import java.io.*; import java.text.*; import java.util.*; import extra.*;

Alkalmazott modul: Programozás

Java Programozás 9. Gy: Java alapok. Adatkezelő 5.rész

INFORMATIKAI ALAPISMERETEK

Objektumorientált programozás C# nyelven

Elemi adatszerkezetek

OAF Gregorics Tibor: Minta dokumentáció a 3. házi feladathoz 1.

Programozás I. Matematikai lehetőségek Műveletek tömbökkel Egyszerű programozási tételek & gyakorlás V 1.0 OE-NIK,

Java Programozás 1. Gy: Java alapok. Ismétlés ++

500. CC Megoldó Alfréd CC 500.

A C# programozási nyelv alapjai

Információs Technológia

.NET alapszolgáltatások 2.

SZERVER OLDALI JAVASCRIPT. 3. hét Javascript nyelvi elemek

abkezel.java import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.sql.*; public class abkezel extends JFrame {

Osztályok. 4. gyakorlat

Programozás I. Első ZH segédlet

Bánsághi Anna 2014 Bánsághi Anna 1 of 35

Java Programozás 4. Gy: Java GUI. Tipper, MVC kalkulátor

Adatszerkezetek és algoritmusok

Bánsághi Anna 2014 Bánsághi Anna 1 of 33

Átírás:

A LEVENSHTEIN TÁVOLSÁG THE LEVENSHTEIN DISTANCE KOS Victor asist. univ. Universitatea din Oradea, Facultatea de Stiinde, Departamentul de Matematica Informatica, Str. Universitatii nr.1, Oradea, Bihor, Romania vkos@uoradea.ro Kivonat: A Levenshtein távolság két karaktersorozat közötti távolság mérésére szolgál. Ez esetben a távolság a hasonlóságok illetve különbségek mérését jelenti a két karaktersorozat között. A Levenshtein távolság szerkesztési távolságként is ismert. A Levenstein távolságot két karaktersorozat között a két string közötti minimális számú, egyetlen egy karakter törlése, beillesztése vagy helyettesítési műveletek száma adja meg. Kulcsszavak: Levesnstein távolság, szerkesztési távolság, C# alkalmazás a Levesnstein távolság kiszámolásához. Abstract: Levenshtein distance is a metric for measuring the amount of difference between two sequences. A metric, in this case, measure similarity or dissimilarity (distance) between two text strings for approximate matching (fuzzy string search) or comparison. The term edit distance is often used to refer specifically to Levenshtein distance. The Levenshtein distance between two strings is defined as the minimum number of edits needed to transform one string into the other, with the allowable edit operations being insertion, deletion, or substitution of a single character. Keywords: Levenshtein distance, Edit distance, C# implementation of Levenshtein distance. 1. BEVEZETÉS E cikk célja egy egyszerű és könnyen megközelíthető leírása a Levenshtein távolságnak, és annak implementálása C#.NET ben. Vladimir Levenshtein, orosz matematikus, vezeti be ezt a fogalmat 1965-ben. A Levenshtein távolság ismert még, mint Edit Distance (ED) [1]. 2. DE MI IS A LEVENSHTEIN TÁVOLSÁG? A Levesnstein távolság (LD) két karaktersorozat (azonos rögzített véges értékkészletű véges sorozatok) közötti távolság mérésére szolgál. Legyen (s) a forrás string és (t) a cél string. A Levenstein távolságot a két string közötti törlés, beillesztés vagy helyettesítő műveletek száma adja meg, úgy hogy (s) sorozatot (t) sorozattá alakítsuk át. - Ha (s) string = próba és (t) string = próba, akkor LD (s, t) = 0, mert nincs szükség semmilyen átalakításra. - Ha (s) string = próba és (t) string = prba, akkor LD (s, t) = 1, mert (s) string-ből ki kell törölni az ó betűt, hogy azonos legyen a (t) string-el. 3. A LEVENSHTEIN TÁVOLSÁG ALKALMAZÁSAI: - Helyesírás ellenőrzése (fuzzy) Ha egy szöveg egy olyan szót tartalmaz, amelyik nem található meg az alkalmazás szótárában, akkor az alkalmazás javasolni fogja a legkisebb Levenshtein Szaklektorált cikk. Leadva: 2011. május 15. Elfogadva: 2011. szeptember 15. Reviewed paper. Submitted: 15 May 2011. Accepted: 15 September 2011. Lektorálta: Prof. Dr. POKORÁDI László / Reviewed by Prof. Dr. László POKORÁDI 9

távolsággal rendelkező szót (vagy szavakat) az eredeti szóhoz képest. A hétköznapi életben a leggyakoribb gépelési hiba a szavakon belüli betűsorrend felcserélése. E hibáknak a klasszikus kijavítása egy törlés és egy beszúrás kombinációja. Ez könnyen optimálható egyetlen egy műveletre. - File-ok verziókezelése. UNIX rendszer alatt létezik a diff f1 f2 parancs, amelyik megtalálja két file között a különbségeket, és létrehoz egy konvertáló script-et f1 és f2 között. - DNS analízis A Levenshtein távolság hozzávetőleges eredményeket ad két szekvencia hasonlóságáról. Ugyanezt a módszert használják két DNS vagy fehérje szekvencia közötti hasonlóság meghatározására, amit különböző célokra használnak fel ( pl. rokonsági fokozat meghatározása vagy evolúciós családfa elemzése). - a plagizálás észlelése. A Leveshtein távolság alkalmazásával felfedezhető két szöveg közötti feltűnő hasonlóság. - Hangfelismerés Egyes hangfelismerő rendszerek ugyanezt a módszert használják a meglévő hangminta és az új hangminta összehasonlítására. 4. AZ ALGORITMUS 1. Lépés Legyen n az s sorozat hossza. Legyen m a t sorozat hossza. ha n == 0, akkor LD(s,t) = m, kilép ha m == 0, akkor LD(s,t) = n, kilép létrehozunk egy M(m,n) mátrixot n sorral és m oszloppal. 2. Lépés Inicializáljuk az első sort 0..m értékekkel, és hasonlóan inicializáljuk az első oszlopot 0..n értékekkel. 3. Lépés összehasonlítunk minden s[i], i=1..m karaktert. 4. Lépés minden t[j], j=1..m karakterrel. 5. Lépés Ha s[i] == t[j], akkor cost = 0, másképp cost = 1 6. Lépés M[i,j] = min (a, b, c ), ahol: a = M[i-1, j] + 1, felső tag + 1, ez a törlés b = M[i,j-1] + 1, baloldali tag + 1, a beszúrás c= M[i-1,j-1] + cost, felső baloldali tag + cost, a helyettesítés 7. Lépés Miután a 3, 4, 5 es 6 -ik lépések iterációi véget értek, az eredményt (LD(s,t)) megtalálhatjuk a mátrix utolsó cellájában az az M[n,m] 10

5. EGY C# ALKALMAZÁS LEÍRÁSA The LevenshteinClass: using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace LevenshteiDistance public class Distance // Kiszamoljuk a Levenshtein tavolsagot public int LD(string s, string t) int n = s.length; // s sorozat hossza int m = t.length; // t sorozat hossza int[,] d = new int[n + 1, m + 1]; // a matrix int cost; // cost // 1 lépés if (n == 0) return m; if (m == 0) return n; // 2 lépés for (int i = 0; i <= n; i++) d[i, 0] = i; for (int j = 0; j <= m; j++) d[0, j] = j; // 3 lépés for (int i = 1; i <= n; i++) // 4 lépés for (int j = 1; j <= m; j++) // 5 lépés cost = (t.substring(j 1, 1) == s.substring(i 1, 1)? 0 : 1); // 6 lépés d[i, j] = System.Math.Min(System.Math.Min(d[i 1, j] + 1, d[i, j 1] + 1), d[i 1, j 1] + cost); // d[i 1, j] + 1 törlés // d[i, j 1] + 1 beszúrás // d[i 1, j 1] + cost a helyettesítés // lasd a matrixot for (int i = 0; i <= n; i++) for (int j = 0; j <= m; j++) Console.Write(d[i, j]); Console.Write( ); Console.WriteLine(); 11

// 7 lépés return d[n, m]; Program: using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace LevenshteiDistance class Program static void Main(string[] args) string s, t; Distance d; d = new Distance(); s = Console.ReadLine(); t = Console.ReadLine(); Console.WriteLine(d.LD(s, t)); Console.ReadLine(); 6. EGY EGYSZERŰ PÉLDA A következő példában végig követjük a Levenshtein módszerrel hogyan jutunk el s= MARIA sortól a t= MARINA sorig. 1. és 2. lépések: M 1 A 2 R 3 Lépések 3-tól 6-ig, ahol i = 1: A 2 R 3 1. Táblázat 2. Táblázat 12

Lépések 3-tól 6-ig, ahol i = 2: R 3 Lépések 3-tól 6-ig, ahol i = 3: R 3 2 1 0 1 2 3 Lépések 3-tól 6-ig, ahol i = 4: R 3 2 1 0 1 2 3 3 2 1 0 1 2 A Lépések 3 -tól 6 -ig, ahol i = 5: R 3 2 1 0 1 2 3 3 2 1 0 1 2 4 3 2 1 1 1 3. Táblázat 4. Táblázat 5. Táblázat 6. Táblázat Az eredmény a mátrix utolsó sorának utolsó oszlopában található, vagyis a két sor közötti távolság az egyenlő 1-el. Ugyanerre az eredményre jutunk, ha intuitív módszerrel oldjuk meg a problémát, vagyis az N betű beszúrásával az eredeti MARIA sor utolsó előtti pozíciójára a MARINA szót kapjuk. Tehát egy beszúrási művelet történt, így elmondhatjuk, hogy a Levenshtein távolság a két sor között az 1. Következtetésképp elmondhatjuk, hogy minél nagyobb eredményhez jutunk, annál nagyobb a két sor közötti különbség. 13

7. ÖSSZEFOGLALÁS Az előző fejezetekben a Levenshtein távolság egy egyszerű és könnyen megközelíthető leírására vállalkoztunk, így lehetőséget nyújtva számos gyakorlati probléma optimált megoldásához. A fentiekben bemutatott algoritmus, és C# programot további optimálásoknak lehet alávetni, és parallelizálása is elképzelhető további időnyereség eléréséhez. A későbbiekben egy parallelizált implementációt szeretnénk létrehozni és lemérni. Az így elért időnyereséget több konfigurációjú számítógépen (például egy, két, három illetve négy magos processzor számítógépen). További cél lehet egy matematikailag optimált fuzzy távolság létrehozása. 8. FELHASZNÁLT IRODALOM: [1] http://en.wikipedia.org/wiki/levenshtein_distance [2] http://www.levenshtein.net/levenshtein_demos.htm [3] Appeared in English as:levenshtein VI (1966). Binary codes capable of correcting deletions, insertions, and reversals. Soviet Physics Doklady 10: 707 10. В.И. Левенштейн (1965). Двоичные коды с исправлением выпадений, вставок и замещений символов. Доклады Академий Наук СCCP 163 (4): 845 8. [4] http://www.csse.monash.edu.au/~lloyd/tildealgds/dynamic/edit/ [5] http://www.merriampark.com/ld.htm 14