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)

Podobne dokumenty