Hahah jag hoppas jag hinner före.
[ailab3.git] / rapport.tex
blob5c1c527418f6c3584457bab0155894d5e3b2d793
1 \documentclass[a4paper, 12pt]{article}
2 \usepackage[swedish]{babel}
3 \usepackage[utf8]{inputenc}
4 \usepackage{verbatim}
5 \usepackage{fancyhdr}
6 \usepackage{graphicx}
7 \usepackage{parskip}
8 % Include pdf with multiple pages ex \includepdf[pages=-, nup=2x2]{filename.pdf}
9 \usepackage[final]{pdfpages}
10 % Place figures where they should be
11 \usepackage{float}
13 % vars
14 \def\title{Projekt}
15 \def\preTitle{Laboration 3: Information Retrieval \& Extraction}
16 \def\kurs{Artificiell Intelligens med inriktning mot kognition och
17 design B, ht 2008}
19 \def\namn{Anton Johansson}
20 \def\mail{dit06ajn@cs.umu.se}
21 \def\namnett{Victor Zamanian}
22 \def\mailett{dit06vzy@cs.umu.se}
24 \def\handledareEtt{Dennis Olsson, denniso@cs.umu.se}
25 \def\inst{datavetenskap}
26 \def\dokumentTyp{Laborationsrapport}
28 \begin{document}
29 \begin{titlepage}
30 \thispagestyle{empty}
31 \begin{small}
32 \begin{tabular}{@{}p{\textwidth}@{}}
33 UMEÅ UNIVERSITET \hfill \today \\
34 Institutionen för \inst \\
35 \dokumentTyp \\
36 \end{tabular}
37 \end{small}
38 \vspace{10mm}
39 \begin{center}
40 \LARGE{\preTitle} \\
41 \huge{\textbf{\kurs}} \\
42 \vspace{10mm}
43 \LARGE{\title} \\
44 \vspace{15mm}
45 \begin{large}
46 \namn, \mail \\
47 \namnett, \mailett
48 \end{large}
49 \vfill
50 \large{\textbf{Handledare}}\\
51 \mbox{\large{\handledareEtt}}
52 \end{center}
53 \end{titlepage}
55 \newpage
56 \thispagestyle{empty}
57 \mbox{}
58 \newpage
60 \pagestyle{fancy}
61 \rhead{\footnotesize{\today}}
62 \lhead{\footnotesize{\namn, \mail \\ \namnett, \mailett}}
63 \chead{}
64 \lfoot{}
65 \cfoot{}
66 \rfoot{}
68 \section*{Sammanfattning}
69 Reguljära uttryck (Regular Expressions, regexp eller regex) är uttryck
70 som innehåller olika syntax för att identifiera specifika textsträngar
71 ur en större mängd text. Detta kan användas inom ämnet Artificiell
72 intelligens för att till exempel validera och tolka indata och
73 specificera olika typer av språk.
75 \newpage
76 \tableofcontents
77 \newpage
79 \rfoot{\thepage}
80 \pagenumbering{arabic}
82 % TODO @anton - Problem-solving as search, basic to AI, Norvig.
84 \section{Introduktion}
85 % till ämnet.
86 Denna rapport går igenom användandet av Reguljära uttrycker (Regular
87 Expressions) med hänseende på informations hämtning inom ämnen
88 Artificiell intelligens.
90 Rapporten är formulerad och utförd enligt specifikation på sidan:\\
91 \verb!http://www.cs.umu.se/kurser/5DV063/HT08/assignments/!\\
92 \verb!lab3-spes-ht08.html!
94 \section{Syfte}
95 % med uppgiften, beskrivet med egna ord.
96 Syftet med rapporten är att fördjupa sig inom ett smalt ämne inom
97 området Artificiell Intelligens och presentera teori för det valda
98 ämnet på ett vetenskapligt sätt.
100 \section{Metodbeskrivning}
101 %: beskrivning av metod, material, design och procedur
102 Denna rapport är sammanställd genom främst en litteraturstudie
103 gällande AI i förhållande till Reguljära uttryck. Informations och
104 tankar är samlade från böcker och internetsidor, för att försöka få
105 ihop en överblick över de Reguljära uttryckens betydelse och
106 användande inom ämnet Artificiell intelligens.
108 \section{Litteraturstudie}
109 %, teoretisk fördjupning
110 Enligt \cite{speech} härstammar Reguljära uttryck från Alan Turings
111 (1936) modell för aritmetisk beräkning, även kallad
112 Turingmaskin. Denna maskin var abstrakt, ett tanke experiment, för att
113 utföra beräkningar.
114 % TODO Church-Turings hypotes säger att varje tänkbar process kan
115 % utföras av en Turingmaskin, och alltså finns det rent principiellt
116 % inte någon mer kraftfull beräkningsmekanism. Enligt wikipedia
117 % http://sv.wikipedia.org/wiki/Turingmaskin
119 Inspirerad av Turings arbete skapade sedan Warren McCulloch och Walter
120 Pitts (1943) en förenklad modell för neuronen, se \cite{norvig}
121 kapitel 18.
123 Stephen Cole Kleene definierade sedan (1951 och 1956) Ändlig
124 automation (Finite automation), Reguljära uttryck och påvisade dess
125 likhet.
127 Både Reguljära uttryck och Finite automation är en del av det en
128 språktyp som brukar kallas Reguljära språk, (''Regular Language'').
130 I boken \cite{speech} ger man ett exempel på hur Finite automation och
131 Reguljära uttryck förhåller sig till varandra. Säg att man ska
132 definiera ett naturligt språk, för enkelhets skull försöker vi
133 definiera vad som är ''ko-språk''. Vi kan säga att korrekt
134 ''ko-språk'' definieras av kombinationerna:
136 \begin{verbatim}
137 Muu!
138 Muuu!
139 Muuuu!
141 \end{verbatim}
143 Detta skulle kunna beskrivas med en modell för \textbf{Finite-state
144 automation} enligt figur nedan.
146 \begin{figure}[H]
147 \begin{center}
148 \includegraphics[width=110mm]{images/state.pdf}
149 \caption{Ändlig automation för ''ko-språk''}
150 \label{state.pdf}
151 \end{center}
152 \end{figure}
154 Tillstånden \verb!q0-q4! är de giltiga tillstånd som finns, \verb!q1!
155 är starttillståndet och \verb!q4! representerar sluttillstånd. Pilarna
156 i figuren markerar möjliga förflyttningar mellan tillstånden.
158 Denna information går även att representera som en
159 \textbf{State-transition tabell}, se nedan:
161 \begin{center}
162 \begin{tabular}{|c|l|l|l|}
163 \hline
164 & \multicolumn{3}{|c|}{Indata} \\
165 \hline
166 Tillstånd & M & u & ! \\
167 \hline
168 0 & 1 & 0 & 0 \\
169 1 & 0 & 2 & 0 \\
170 2 & 0 & 3 & 0 \\
171 3 & 0 & 3 & 4 \\
172 4 & 0 & 0 & 0 \\
173 \hline
174 \end{tabular}
175 \end{center}
177 Ovan tabell läses av uppifrån och ner. Starttillståndet \verb!0! har
178 en giltig förflyttning till tillstånd \verb!1!, detta gäller enbart
179 för indata \verb!M!, för alla andra indata finns inga giltiga
180 förflyttningar, detta markeras med \verb!0!.
182 Det korresponderande \textbf{Reguljära uttrycket} för att beskriva
183 ''ko-språk'' skulle vara:
185 \begin{verbatim}
186 Muu+!
187 \end{verbatim}
189 Man läser det som man läser det ungefär som man läser vanlig
190 text. \verb!M! är tillåtet starttillstånd, följt av ett \verb!u!,
191 sedan markerar operatorn \verb!u+! att en eller flera \verb!u! är
192 tillåtna. Meningen avslutas med \verb?!?, vilket markerar
193 sluttillståndet. % Se sektion TODO för mer info om regexp syntax.
195 % REGEXP-MANUAL:
196 % Står på sidan 848 i Norvig.
197 % TODO @anton/victor - beskrivning regexp manual med fina tabeller.
199 Ett reguljärt uttryck består enkelt nog av text som ska matchas. Om
200 man vill matcha texten ''hej'' i en textsträng ''hoppsanhejsan'' så
201 blir det reguljära uttrycket helt enkelt bara ''hej'' och ''hej'':et i
202 ''hoppsanhejsan'' matchas. Däremot är det mer sällan man använder
203 reguljära uttryck för sådana enkla matchningar. Man vill i stället
204 använda dem till att matcha \textbf{generella mönster}. Ett exempel på
205 ett mönster skulle kunna vara en e-postadress på formen
206 \verb!<användarnamn>@<subdomän>.<domän>!, där \verb!<användarnamn>!
207 kan innehålla (i detta exempel) alla siffror, alla små och stora
208 bokstäver, understreck, punkt, bindestreck och plus.
210 I stället för att behöva skriva ett textmönster för varje e-postadress
211 som är möjlig att konstruera (i praktiken oräkneligt antal
212 variationer) kan man använda sig av speciella ''texthändelser'' för
213 att beskriva till exempel början\slash slutet av ett ord och
214 början\slash slutet av en hel sträng. Man kan också definiera
215 teckenklasser som man vill inkludera i sitt uttryck, till exempel alla
216 stora bokstäver, alla små bokstäver, siffror, eller till och med
217 vilken godtycklig kombination av tecken som helst. Här nedanför visas
218 en kort tabell med några texthändelser och deras motsvarande reguljära
219 uttryck.
221 \begin{center}
222 \begin{footnotesize}
223 \begin{tabular}{|c|p{4cm}|l|l|l|}
224 \hline
225 regex-uttryck & Texthändelse & Exempel & Matchar
226 \\ \hline
227 \verb!\b! & Början eller slutet på ett ord & \verb!\b!text\verb!\b! & ''ord1 \textbf{text} ord3'' \\ \hline
231 \verb!^! & Början av en textsträng & \verb!^!text & ''\textbf{text} i början'' \\ \hline
233 \verb!$! & Slutet av en textsträng & \verb!lutet$! & ''text i s\textbf{lutet}'' \\ \hline
235 \verb![A-Za-z0-9]! & Definierar klass med tecknen A till Z, a
236 till z och 0 till 9. & \verb![abc0-9]! & ''\textbf{b}r\textbf{a} text med \textbf{23} te\textbf{c}ken'' \\
238 \hline
240 \verb!.! & Står för vilket tecken som helst. & \verb!^.! & ''\textbf{t}ext'' \\ \hline
241 \end{tabular}
242 \end{footnotesize}
243 \end{center}
245 Om man vill matcha en e-postadress i löpande text skulle man alltså
246 vilja använda sig av \verb!\b! runt uttrycket för att markera att det
247 som finns runt omkring adressen måste vara ordavgränsare av något
248 slag, så som ny rad eller någon typ av blanktecken. Vill man däremot
249 kontrollera indata från till exempel ett formulärfält där det är
250 meningen att en användare ska ange enbart en e-postadress är det
251 däremot önskvärt att omsluta uttrycket med \verb!^! i början och
252 \verb!$! i slutet för att markera att hela strängen måste
253 \textbf{börja och sluta med} adressen.
255 % Olika sätt att matcha e-mail adresser.
256 % \b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}\b
257 % ^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}$
259 \section{Resultat}
260 % innehållande sammanställning/analys av eventuell testdata,
261 % implementering av algoritmer osv.
263 % TODO - resultat, användningsområden kopplade till AI.
264 % TODO @anton - Kolla upp och skriv om ELIZA, regexp memory.
265 \subsection{Applikationer av Reguljära uttryck}
266 \subsubsection{ELIZA}
267 Mer avancerade former av Reguljära uttryck kan använda sig av
268 minnesfunktioner för att spara tidigare matchningar. I
269 programmeringssråket Perl kan man göra ersättningar på formen:
270 \begin{verbatim}
271 s/hej/hejsan/
272 \end{verbatim}
274 Här ersätts alla \verb!hej! med \verb!hejsan!. För att spara träffar i
275 sökningen och ersätta med samma ord i ersättningssträngen använder man
276 grupper inom parenteser \verb!()!. Den sträng som en grupp matchar kan
277 sedan refereras till, \verb!\1!, representerar innehållet i första
278 gruppen.
280 \begin{verbatim}
281 s/heter (\w+)/Hej på dig \1, trevligt att höras/
282 \end{verbatim}
284 Ovan Reguljära uttryck skulle ersätta ''Hej jag heter Anton'' med
285 ''Hej på dig Anton, trevligt att höras''. Denna typ av Reguljära
286 ersättningar utgör grunden för implementationen av Chatroboten ELIZA,
287 som utvecklades Joseph Weizenbaum, se \cite{speech}. Nedan följer en
288 kort konversation med Emacs implementering av ELIZA:
290 \begin{itemize}
291 \item[-] Hello my name is Anton
292 \item[-] \textbf{ELIZA:} How do you do? What brings you to see me?
293 \item[-] I need help with some Artificial Intelligence questions
294 \item[-] \textbf{ELIZA:}Why do you say you need help with some artificial intelligence questions?
295 \item[-] I'm writing a rapport on Regular Expressions
296 \item[-] \textbf{ELIZA:}Is it because of your plans that you say you are writing a rapport on
297 regular expressions?
298 \end{itemize}
300 Ovan exempel vittar om att denna typ av chatrobot har en relativt fast
301 ram med frågor–svar att följa, det tar inte lång tid för en mänsklig
302 användare att fatta att det inte är en mänsklig motpart man
303 kommunicerar med. ELIZA är implementerad för att svara på frågor som
304 rök Psykoterapi, så fort man lämnar det bekanta ämnet blir
305 följdfrågorna ologiska ur ett mänskligt perspektiv.
307 Implementationerna av ELIZA har en mängd svar hårdkodade i sig. Nedan
308 kodsnutt visar svaren som kan fås av indata som innehåller vissa
309 nyckelord gälladen död:
311 \begin{footnotesize}
312 \begin{verbatim}
313 (setq deathlst
314 '((this is not a healthy way of thinking \.)
315 ((doc$ bother) you\, too\, may die someday \?)
316 (i am worried by your obsession with this topic!)
317 (did you watch a lot of crime and violence on television as a child \?))
319 \end{verbatim}
320 \end{footnotesize}
322 Även en mängd språkord sparas för att på ett bättre sätt kunna tolka
323 indata, exempelvis synonymer och förkortningar:
325 \begin{footnotesize}
326 \begin{verbatim}
327 (setq replist
328 (wanna . (want to))
329 (gimme . (give me))
330 (gotta . (have to))
331 (gonna . (going to))
332 (never . (not ever))
333 ...)
334 \end{verbatim}
335 \end{footnotesize}
337 \subsubsection{Tolkning av indata}
338 När ett datorsystem får indata från användare, finns en mängd
339 användbara Reguljära uttryck för att tolka och behandla denna indata
340 på ett vettigt sätt. Det kan gälla alla typer av indata. Exempelvis
341 som verifiering e-postadresser, datum, telefonnummer och så
342 vidare. Detta är användbart vid allt typ av indata från användare, och
343 i hög grad aktuellt när det gäller forumlär på Internet.
345 Till exempel kan man istället för att kräva att användare ska skriva
346 för och efternamn i separata rutor använda Reguljära uttryck för att
347 försöka tolka vad som är vad. Samma sak gäller adresser och
348 telefonnummer. Det kan vara intressant att ha information och ett
349 telefonnummers riktnummer och landskod, utan att för den sakens skull
350 kräva att en användare ska behöva specificera upp allt sådant
351 manuellt. Följer man bara vanliga konventioner för hur telefonnummer
352 skrivs kan man skapa ett Reguljärt uttryck för att fånga upp all denna
353 information ur en enda textsträng. All sådan här tolkning av indata är
354 väldigt bra ur användarsynpunkt, ''Don't make me click'', som Aza
355 Raskin \cite{raskin:website} säger i en presentation om
356 användarvänlighet på webbsidor.
358 Ett annat bra exempel på hur Reguljära uttryck kan underlätta
359 inmatning av data finns implementerat i den webbaserade kalendern,
360 http://google.com/calendar/. För att skapa en ny händelse i kalendern
361 kan användaren klicka på aktuell dag och skriva till exempel ''Äta mat
362 hos mamma kl 10-12'', detta genererar en händelse med rubrik ''Äta mat
363 hos mamma'' och placeras med start kl 10 och slut kl 12. Ett Reguljärt
364 uttryck för detta skulle kunna vara att matcha de första siffrorna
365 efter \verb!(kl|klockan)!, dessa borde vara starttimme för händelse.
366 Följs dessa siffror av \verb!.! eller \verb!:! utan mellanslag efter
367 skulle nästa siffror kunna representera minuter, nästa siffror kan
368 representera sluttid och så vidare. På detta sätt kan man med hjälp av
369 Reguljära uttryck representera naturligt språk för datorn. Vidare
370 skulle extra nyckelord kunna läggas in, till exempel \verb!hos! för
371 att markera att det som följer är en position, eller \verb!med! för
372 att markera att följande text innehåller information om deltagare i
373 händelsen.
375 \subsubsection{Datahämtning}
376 Reguljära uttryck kan användas för att hämta och tolka information ur
377 en större mängd data. Ett trivialt exempel är till exempel att försöka
378 svara på frågan, ''Vad är det för väder i Umeå idag'' baserat på
379 innehållet från sidan:
381 \begin{verbatim}
382 http://www.tfe.umu.se/weather/1440/900/10/sv-SE/now.htm
383 \end{verbatim}
385 Html-taggen som visar den aktuella temperaturen i Umeå har följande
386 utseende:
387 \begin{verbatim}
388 <td class="tempfont" ... >0,7 &deg;C</td>
389 \end{verbatim}
391 Det som skiljer denna tagg från de andra på sidan är attributet
392 \verb!class="tempfont"!. Den aktuella temperaturen visas mellan
393 \verb!<td ...>! och \verb!</td>!, det innebär att det skulle vara
394 $0,7\,^{\circ}\mathrm{C}$ dagen sidan hämtades. Följande Reguljära
395 uttryck matchar enbart strängen som innehåller temperatur:
397 \begin{verbatim}
398 <td class="tempfont.+?>([0-9]+,[0-9]+)
399 \end{verbatim}
401 Med denna information kan man sedan förenkla och säga att bra väder
402 gäller för alla $temperaturer \geq 15$ och dåligt väder gäller för
403 $temperaturer < 15$. Detta Reguljära uttryck är mycket specifikt och
404 enbart användbart på denna specifika sida så länge temperaturen
405 inkapslas av exakt ovan tagg och attribut.
407 \section{Diskussion}
408 % av resultatet, koppling till tidigare studier.
410 \section{Slutsats}
413 %. Använd minst två referenser utöver kursboken.
414 \bibliographystyle{alpha}
415 \bibliography{books}
417 \end{document}