Poprawianie pisowni
Transkrypt
Poprawianie pisowni
Poprawianie pisowni Błędna pisownia może być powodowana przez różne czynniki: błędy w przekazywaniu sygnałów do mięśni odpowiedzialnych za ruch palców (literówki, np. litreówki); nieznajomość pisowni słów i zasad ortografii (wymowa błędnej formy jest taka sama lub podobna do wymowy formy poprawnej, np. Stary człowiek i może jako tytuł znanego utworu literackiego a nie reklama leku); nieznajomość morfologii (np. upartość zamiast upór). Metody poprawiania pisowni powinny uwzględniać model błędów użytkownika. Jan Daciuk, KISI, ETI, PG Przetwarzanie języka naturalnego 6. Korekta pisowni: odległość Levenshteina (166 / 188) Odległość Levenshteina Odległość Levenshteina dwóch łańcuchów znaków x i y to minimalna liczba prostych operacji edycyjnych, które przekształcają łańcuch x w łańcuch y (lub odwrotnie). Proste operacje edycyjne to: wstawienie znaku, np. kota → kwota usunięcie znaku, np. kwota → kota zamiana znaku, np. kota → koza zamiana miejscami dwóch sąsiadujących znaków (tzw. czeski błąd), np. pisk → psik Jan Daciuk, KISI, ETI, PG Przetwarzanie języka naturalnego 6. Korekta pisowni: odległość Levenshteina (167 / 188) Odległość Levenshteina ed(X1...i+1 , Y1...j+1 ) ed(X1...0 , Y1...j ) ed(X1...i , Y1...0 ) ed(X1...−1 , Y1...j ) Jan Daciuk, KISI, ETI, PG = ed(X1...i , Y1...j ) = 1 + min{ed(X1...i−1 , Y1...j−1 , ed(X1...i+1 , Y1...j ), ed(X1...i , Y1...j+1 )} = 1 + min{ed(X1...i , Y1...j ), ed(X1...i+1 , Y1...j ), ed(X1...i , Y1...j+1 )} j i ed(X1...i , Y1...−1 ) = max(m, n) = = = Przetwarzanie języka naturalnego jeśli xi+1 = yj+1 (ostatnie znaki takie same) jeśli xi = yj+1 i xi+1 = yj (dwa ostatnie znaki zamienione miejscami) w pozost. przypadkach 0≤j≤n 0≤i≤m (Definicje brzegowe) 6. Korekta pisowni: odległość Levenshteina (168 / 188) Odległość Levenshteina przestawienie: (kula,kual) . ed(X1...i+1 , Y1...j+1 ) ed(X1...0 , Y1...j ) ed(X1...i , Y1...0 ) ed(X1...−1 , Y1...j ) Jan Daciuk, KISI, ETI, PG = ed(X1...i , Y1...j ) = 1 + min{ed(X1...i−1 , Y1...j−1 ,. ed(X1...i+1 , Y1...j ), ed(X1...i , Y1...j+1 )} = 1 + min{ed(X1...i , Y1...j ), ed(X1...i+1 , Y1...j ), ed(X1...i , Y1...j+1 )} j i ed(X1...i , Y1...−1 ) = max(m, n) = = = Przetwarzanie języka naturalnego jeśli xi+1 = yj+1 (ostatnie znaki takie same) jeśli xi = yj+1 i xi+1 = yj (dwa ostatnie znaki zamienione miejscami) w pozost. przypadkach 0≤j≤n 0≤i≤m (Definicje brzegowe) 6. Korekta pisowni: odległość Levenshteina (169 / 188) Odległość Levenshteina usunięcie: (bab,baba) ed(X1...i+1 , Y1...j+1 ) = = = ed(X1...0 , Y1...j ) ed(X1...i , Y1...0 ) ed(X1...−1 , Y1...j ) Jan Daciuk, KISI, ETI, PG = = = . jeśli x i+1 = yj+1 (ostatnie znaki takie same) 1 + min{ed(X1...i−1 , Y1...j−1 , jeśli xi = yj+1 ed(X1...i+1 , Y1...j )., i xi+1 = yj ed(X1...i , Y1...j+1 )} (dwa ostatnie znaki zamienione miejscami) 1 + min{ed(X1...i , Y1...j ), w pozost. przypadkach ed(X1...i+1 , Y1...j ), ed(X1...i , Y1...j+1 )} j 0≤j≤n i 0≤i≤m ed(X1...i , Y1...−1 ) = max(m, n) (Definicje brzegowe) ed(X1...i , Y1...j ) Przetwarzanie języka naturalnego 6. Korekta pisowni: odległość Levenshteina (170 / 188) Odległość Levenshteina ed(X1...i+1 , Y1...j+1 ) = = = ed(X1...0 , Y1...j ) ed(X1...i , Y1...0 ) ed(X1...−1 , Y1...j ) Jan Daciuk, KISI, ETI, PG = = = ed(X1...i , Y1...j ) jeśli xi+1 = yj+1 wstawienie: (babab,baba) . (ostatnie znaki takie same) 1 + min{ed(X1...i−1 , Y1...j−1 , jeśli xi = yj+1 ed(X1...i+1 , Y1...j ), i xi+1 = yj ed(X1...i , Y1...j+1 ).} (dwa ostatnie znaki zamienione miejscami) 1 + min{ed(X1...i , Y1...j ), w pozost. przypadkach ed(X1...i+1 , Y1...j ), ed(X1...i , Y1...j+1 )} j 0≤j≤n i 0≤i≤m ed(X1...i , Y1...−1 ) = max(m, n) (Definicje brzegowe) Przetwarzanie języka naturalnego 6. Korekta pisowni: odległość Levenshteina (171 / 188) Odległość Levenshteina ed(X1...i+1 , Y1...j+1 ) = = = ed(X1...0 , Y1...j ) ed(X1...i , Y1...0 ) ed(X1...−1 , Y1...j ) Jan Daciuk, KISI, ETI, PG = = = ed(X1...i , Y1...j ) jeśli xi+1 = yj+1 (ostatnie znaki takie (kod,kot) same) zamiana: . , 1 + min{ed(X1...i−1 , Y1...j−1 jeśli xi = yj+1 ed(X1...i+1 , Y1...j ), i xi+1 = yj ed(X1...i , Y1...j+1 )} (dwa ostatnie znaki zamienione miejscami) w pozost. przypadkach 1 + min{ed(X1...i , Y1...j )., ed(X1...i+1 , Y1...j ), ed(X1...i , Y1...j+1 )} j 0≤j≤n i 0≤i≤m ed(X1...i , Y1...−1 ) = max(m, n) (Definicje brzegowe) Przetwarzanie języka naturalnego 6. Korekta pisowni: odległość Levenshteina (172 / 188) Odległość Levenshteina ed(X1...i+1 , Y1...j+1 ) = = = ed(X1...0 , Y1...j ) ed(X1...i , Y1...0 ) ed(X1...−1 , Y1...j ) Jan Daciuk, KISI, ETI, PG = = = ed(X1...i , Y1...j ) jeśli xi+1 = yj+1 (ostatnie znaki takie same) 1 + min{ed(X1...i−1 , Y1...j−1 , jeśli xi = yj+1 usunięcie: (kot,kota) ed(X1...i+1 , Y1...j ), . i xi+1 = yj ed(X1...i , Y1...j+1 )} (dwa ostatnie znaki zamienione miejscami) 1 + min{ed(X1...i , Y1...j ), w pozost. przypadkach ed(X1...i+1 , Y1...j )., ed(X1...i , Y1...j+1 )} j 0≤j≤n i 0≤i≤m ed(X1...i , Y1...−1 ) = max(m, n) (Definicje brzegowe) Przetwarzanie języka naturalnego 6. Korekta pisowni: odległość Levenshteina (173 / 188) Odległość Levenshteina ed(X1...i+1 , Y1...j+1 ) = = = ed(X1...0 , Y1...j ) ed(X1...i , Y1...0 ) ed(X1...−1 , Y1...j ) Jan Daciuk, KISI, ETI, PG = = = ed(X1...i , Y1...j ) jeśli xi+1 = yj+1 (ostatnie znaki takie same) 1 + min{ed(X1...i−1 , Y1...j−1 , jeśli xi = yj+1 ed(X1...i+1 , Y1...j ), wstawienie: i xi+1 = yj (kota,kot) ed(X1...i , Y1...j+1 )} . (dwa ostatnie znaki zamienione miejscami) 1 + min{ed(X1...i , Y1...j ), w pozost. przypadkach ed(X1...i+1 , Y1...j ), ed(X1...i , Y1...j+1 ).} j 0≤j≤n i 0≤i≤m ed(X1...i , Y1...−1 ) = max(m, n) (Definicje brzegowe) Przetwarzanie języka naturalnego 6. Korekta pisowni: odległość Levenshteina (174 / 188) Odległość edycyjna – przykład ⋄ g ł u p s i ⋄ 0. 1 2 3 4 5 6 g 1 0.. 1.. 2. 3. 5. 5 u 2 1. 1.. 1.. 2. 3. 4 Jan Daciuk, KISI, ETI, PG p 3 2. 2.. 2. 1.. 2.. 3 c 4 3. 3.. 3. 2.. 2.. 3 h 5 4. 4.. 4. 3.. 3.. 3 i 6 5. 5.. 5. 4.. 4 3. s 7 6 6 6 5 4 4 Przetwarzanie języka naturalnego 6. Korekta pisowni: odległość Levenshteina (175 / 188) Odległość edycyjna – przykład ed(g, g) = ed(ϵ, ϵ) = 0 ⋄ g ł u p s i ⋄ 0. 1 2 3 4 5 6 g 1 0.. 1.. 2. 3. 5. 5 u 2 1. 1.. 1.. 2. 3. 4 Jan Daciuk, KISI, ETI, PG p 3 2. 2.. 2. 1.. 2.. 3 c 4 3. 3.. 3. 2.. 2.. 3 h 5 4. 4.. 4. 3.. 3.. 3 i 6 5. 5.. 5. 4.. 4 3. s 7 6 6 6 5 4 4 Przetwarzanie języka naturalnego g g 6. Korekta pisowni: odległość Levenshteina (176 / 188) Odległość edycyjna – przykład ed(g, gł) = 1 + min{ed(ϵ, g), ed(g, g), ed(ϵ, gł)} = 1 + min{1, 0, 2} = 1 ⋄ g ł u p s i ⋄ 0. 1 2 3 4 5 6 g 1 0.. 1.. 2. 3. 5. 5 u 2 1. 1.. 1.. 2. 3. 4 Jan Daciuk, KISI, ETI, PG p 3 2. 2.. 2. 1.. 2.. 3 c 4 3. 3.. 3. 2.. 2.. 3 h 5 4. 4.. 4. 3.. 3.. 3 i 6 5. 5.. 5. 4.. 4 3. s 7 6 6 6 5 4 4 Przetwarzanie języka naturalnego g g ł 6. Korekta pisowni: odległość Levenshteina (177 / 188) Odległość edycyjna – przykład ed(gu, głu) = ed(g, gł) = 1 ⋄ g ł u p s i ⋄ 0. 1 2 3 4 5 6 g 1 0.. 1.. 2. 3. 5. 5 u 2 1. 1.. 1.. 2. 3. 4 Jan Daciuk, KISI, ETI, PG p 3 2. 2.. 2. 1.. 2.. 3 c 4 3. 3.. 3. 2.. 2.. 3 h 5 4. 4.. 4. 3.. 3.. 3 i 6 5. 5.. 5. 4.. 4 3. s 7 6 6 6 5 4 4 Przetwarzanie języka naturalnego g g ł u u 6. Korekta pisowni: odległość Levenshteina (178 / 188) Odległość edycyjna – przykład ed(gup, głup) = ed(gu, głu) = 1 ⋄ g ł u p s i ⋄ 0. 1 2 3 4 5 6 g 1 0.. 1.. 2. 3. 5. 5 u 2 1. 1.. 1.. 2. 3. 4 Jan Daciuk, KISI, ETI, PG p 3 2. 2.. 2. 1.. 2.. 3 c 4 3. 3.. 3. 2.. 2.. 3 h 5 4. 4.. 4. 3.. 3.. 3 i 6 5. 5.. 5. 4.. 4 3. s 7 6 6 6 5 4 4 Przetwarzanie języka naturalnego g g ł u u p p 6. Korekta pisowni: odległość Levenshteina (179 / 188) Odległość edycyjna – przykład ed(gupc, głups) = 1 + min{ed(gup, głup), ed(gupc, głup), ed(gup, głups)} = 1 + min{1, 2, 2} = 2 ⋄ g ł u p s i ⋄ 0. 1 2 3 4 5 6 g 1 0.. 1.. 2. 3. 5. 5 u 2 1. 1.. 1.. 2. 3. 4 Jan Daciuk, KISI, ETI, PG p 3 2. 2.. 2. 1.. 2.. 3 c 4 3. 3.. 3. 2.. 2.. 3 h 5 4. 4.. 4. 3.. 3.. 3 i 6 5. 5.. 5. 4.. 4 3. s 7 6 6 6 5 4 4 Przetwarzanie języka naturalnego g g ł u u p p c s 6. Korekta pisowni: odległość Levenshteina (180 / 188) Odległość edycyjna – przykład ed(gupch, głups) = 1 + min{ed(gupc, głup), ed(gupch, głup), ed(gupc, głups)} = 1 + min{2, 3, 2} = 3 ⋄ g ł u p s i ⋄ 0. 1 2 3 4 5 6 g 1 0.. 1.. 2. 3. 5. 5 u 2 1. 1.. 1.. 2. 3. 4 Jan Daciuk, KISI, ETI, PG p 3 2. 2.. 2. 1.. 2.. 3 c 4 3. 3.. 3. 2.. 2.. 3 h 5 4. 4.. 4. 3.. 3.. 3 i 6 5. 5.. 5. 4.. 4 3. s 7 6 6 6 5 4 4 Przetwarzanie języka naturalnego g g ł u u p p c s h 6. Korekta pisowni: odległość Levenshteina (181 / 188) Odległość edycyjna – przykład ed(gupchi, głupsi) = ed(gupch, głups) = 3 ⋄ g ł u p s i ⋄ 0. 1 2 3 4 5 6 g 1 0.. 1.. 2. 3. 5. 5 u 2 1. 1.. 1.. 2. 3. 4 Jan Daciuk, KISI, ETI, PG p 3 2. 2.. 2. 1.. 2.. 3 c 4 3. 3.. 3. 2.. 2.. 3 h 5 4. 4.. 4. 3.. 3.. 3 i 6 5. 5.. 5. 4.. 4 3. s 7 6 6 6 5 4 4 Przetwarzanie języka naturalnego g g ł u u p p c s h i i 6. Korekta pisowni: odległość Levenshteina (182 / 188) Odległość edycyjna – przykład ed(gupchis, głupsi) = 1 + min{ed(gupch, głup), ed(gupchi, głupsi), ed(gupchis, głups)} = 1 + min{3, 3, 4} = 4 ⋄ g ł u p s i ⋄ 0. 1 2 3 4 5 6 g 1 0.. 1.. 2. 3. 5. 5 u 2 1. 1.. 1.. 2. 3. 4 Jan Daciuk, KISI, ETI, PG p 3 2. 2.. 2. 1.. 2.. 3 c 4 3. 3.. 3. 2.. 2.. 3 h 5 4. 4.. 4. 3.. 3.. 3 i 6 5. 5.. 5. 4.. 4 3. s 7 6 6 6 5 4 4 Przetwarzanie języka naturalnego g g ł u u p p c s h i i 6. Korekta pisowni: odległość Levenshteina s (183 / 188) Odległość edycyjna – przykład ⋄ g ł u p s i ⋄ 0. 1 2 3 4 5 6 g 1 0.. 1.. 2. 3. 5. 5 u 2 1. 1.. 1.. 2. 3. 4 Jan Daciuk, KISI, ETI, PG p 3 2. 2.. 2. 1.. 2.. 3 c 4 3. 3.. 3. 2.. 2.. 3 h 5 4. 4.. 4. 3.. 3.. 3 i 6 5. 5.. 5. 4.. 4 3. s 7 6 6 6 5 4 4 Przetwarzanie języka naturalnego g g ł u u p p c h s i i 6. Korekta pisowni: odległość Levenshteina s (184 / 188) Odległość edycyjna – przykład ⋄ g ł u p s i ⋄ 0. 1 2 3 4 5 6 g 1 0.. 1.. 2. 3. 5. 5 u 2 1. 1.. 1.. 2. 3. 4 Jan Daciuk, KISI, ETI, PG p 3 2. 2.. 2. 1.. 2.. 3 c 4 3. 3.. 3. 2.. 2.. 3 h 5 4. 4.. 4. 3.. 3.. 3 i 6 5. 5.. 5. 4.. 4 3. s 7 6 6 6 5 4 4 Przetwarzanie języka naturalnego g g ł u u p p c h i s 6. Korekta pisowni: odległość Levenshteina s i (185 / 188) Edycyjna odległość odcięcia Porównywanie w całości wszystkich słów w słowniku z formą niepoprawną X (o długości m) byłoby zbyt kosztowne. Wystarczy sprawdzić tylko część potencjalnego zamiennika Y (o długości n) z częścią niepoprawnej formy X i zadecydować, czy sprawdzać następne litery formy: cuted(X1...m , Y1...n ) = min ed(X1...i , Y1...n ), l≤i≤u l = min(1, n − t), u = max(m, n + t) t jest maksymalną dopuszczalną odległością, operacje min i max zapobiegają wyjściu indeksów poza granice słowa. Jan Daciuk, KISI, ETI, PG Przetwarzanie języka naturalnego 6. Korekta pisowni: odległość Levenshteina (186 / 188) Edycyjna odległość odcięcia 3 3 2 w 2 0 ł 1 c 3 m a c ó g 3 2 o . ą w 2 0 h 3 ś 3 3 o i 3 2 u 1 1 p s s 2 3 i z 2 i 3 3 z ą 3 e y 4 4 a 4 4 Dla t = 4, cuted(gupchis,głuch)=min{ed(g,głuch),ed(gu,głuch),ed(gup,głuch), ed(gupc,głuch),ed(gupch,głuch),ed(gupchi,głuch),ed(gupchis,głuch)}=2 Jan Daciuk, KISI, ETI, PG Przetwarzanie języka naturalnego 6. Korekta pisowni: odległość Levenshteina (187 / 188) Edycyjna odległość odcięcia 3 3 2 w 2 0 ł 1 c 3 m a c ó g 3 2 o . ą w 2 0 h 3 ś 3 3 o i 3 2 u 1 s . .. g. ł. u. k. s. i. .. 0. 1. 2. 3. 4. 5. 6. g. 1. . . . . . . 1 p s 2 3 i z 2 i 3 3 z ą 3 e y 4 4 a 4 4 Dla t = 4, cuted(gupchis,głuch)=min{ed(g,głuch),ed(gu,głuch),ed(gup,głuch), ed(gupc,głuch),ed(gupch,głuch),ed(gupchi,głuch),ed(gupchis,głuch)}=2 Jan Daciuk, KISI, ETI, PG Przetwarzanie języka naturalnego 6. Korekta pisowni: odległość Levenshteina (188 / 188)