expensive.
The program is built so that a programmer can easily add fields or categories
-to the data to make it flexible for changes.
+to the application to reduce programming costs and complex modifications.
\section{Why RSS/Atom}
Information from venues comes in various different format with for each format
great need of data mining in non structured data because the data within
companies and on the internet is piling up and are usually left to catch dust.
-The project is a continuation of the past project done by Roelofs et
-al.\cite{Roelofs2009}. The techniques described by Roelofs et al. are more
-focussed on extracting data from websites and/or already isolated data so it
-can be an addition to the current project.
+The project is a side project of the past project done by Roelofs et
+al.\cite{Roelofs2009}. Roelofs et al. describes a technique to recognize date
+strings using an adapted Levensteins algorithm. This technique can be fitted in
+the current project because it works on a low level and the technique we
+describe works on a high level. The algorithm only works on already isolated
+data.
\section{Crawler application}
\subsection{Interface}
-\subsection{Algorithm}
\subsection{Preprocessing}
When the data is received by the crawler the data is embedded as POST data in a
HTTP request. The POST data consists of several fields with information about
\caption{Sample DAG}
\label{fig:f21}
\centering
- \digraph[]{graph2}{
+ \digraph[]{graph21}{
rankdir=LR;
1, 2 [shape="circle"];
3, 4 [shape="doublecircle"];
}
\end{figure}
-Using the algorithm described by Hopcroft et al\cite{Hopcroft1971} the
-nodelists are converted into minimal directed acyclic graphs with a low
-complexity($\mathcal{O}(N\log{N})$).
+The first algorithm to generate DAG's was proposed by Hopcroft et
+al\cite{Hopcroft1971}. The algorithm they described wasn't incremental and had
+a complexity of $\mathcal{O}(N\log{N})$. \cite{Daciuk2000} et al. later
+extended the algorithm and created an incremental one without increasing the
+computational complexity. The non incremental algorithm from Daciuk et al. is
+used to convert the nodelists to a graph.
+
+For example constructing a graph that from the entry: \textit{a,bc} and
+\textit{a.bc} goes in the following steps:
+
+\begin{figure}[H]
+ \caption{Sample DAG, first entry}
+ \label{fig:f22}
+ \centering
+ \digraph[]{graph22}{
+ rankdir=LR;
+ 1,2,3,5 [shape="circle"];
+ 5 [shape="doublecircle"];
+ 1 -> 2 [label="a"];
+ 2 -> 3 [label="."];
+ 3 -> 4 [label="b"];
+ 4 -> 5 [label="c"];
+ }
+\end{figure}
+
+\begin{figure}[H]
+ \caption{Sample DAG, second entry}
+ \label{fig:f23}
+ \centering
+ \digraph[]{graph23}{
+ rankdir=LR;
+ 1,2,3,5,6 [shape="circle"];
+ 5 [shape="doublecircle"];
+ 1 -> 2 [label="a"];
+ 2 -> 3 [label="."];
+ 3 -> 4 [label="b"];
+ 4 -> 5 [label="c"];
+
+ 2 -> 6 [label=","];
+ 6 -> 4 [label="b"];
+ }
+\end{figure}
+
+\subsection{Defining categories}
+pass
+
+\subsection{Process}
+Proposal was written
+
+
+First html/mail/fax/rss, worst case rss
+
+
+After some research and determining the scope of the project we decided only to
+do RSS, this because RSS tends to force structure in the data because RSS feeds
+are often generated by the website and thus reliable and consistent. We found a
+couple of good RSS feeds.
+
+
+At first the general framework was designed and implemented, no method yet.
+
+
+Started with method for recognizing separators.
+
+
+Found research paper about algorithm that can create directed acyclic graphs
+from string, although it was designed to compress word lists it can be
+(mis)used to extract information.
+
+
+Implementation of DAG algorithm found and tied to the program.
+
+
+Command line program ready. Conversation with both supervisors, gui had to be
+made.
+
+Step by step gui created. Web interface as a control center for the crawlers.
+
+
+Gui optimized.
+
+
+Concluded that the program doesn't reach wide audience due to lack of well
+structured rss feeds.
--- /dev/null
+digraph graph21 {
+rankdir=LR;
+1, 2 [shape="circle"];
+3, 4 [shape="doublecircle"];
+1 -> 2 [label="a"];
+2 -> 3 [label="a"];
+2 -> 4 [label="b"];
+}
--- /dev/null
+%!PS-Adobe-3.0
+%%Creator: graphviz version 2.38.0 (20140413.2041)
+%%Title: graph21
+%%Pages: (atend)
+%%BoundingBox: (atend)
+%%EndComments
+save
+%%BeginProlog
+/DotDict 200 dict def
+DotDict begin
+
+/setupLatin1 {
+mark
+/EncodingVector 256 array def
+ EncodingVector 0
+
+ISOLatin1Encoding 0 255 getinterval putinterval
+EncodingVector 45 /hyphen put
+
+% Set up ISO Latin 1 character encoding
+/starnetISO {
+ dup dup findfont dup length dict begin
+ { 1 index /FID ne { def }{ pop pop } ifelse
+ } forall
+ /Encoding EncodingVector def
+ currentdict end definefont
+} def
+/Times-Roman starnetISO def
+/Times-Italic starnetISO def
+/Times-Bold starnetISO def
+/Times-BoldItalic starnetISO def
+/Helvetica starnetISO def
+/Helvetica-Oblique starnetISO def
+/Helvetica-Bold starnetISO def
+/Helvetica-BoldOblique starnetISO def
+/Courier starnetISO def
+/Courier-Oblique starnetISO def
+/Courier-Bold starnetISO def
+/Courier-BoldOblique starnetISO def
+cleartomark
+} bind def
+
+%%BeginResource: procset graphviz 0 0
+/coord-font-family /Times-Roman def
+/default-font-family /Times-Roman def
+/coordfont coord-font-family findfont 8 scalefont def
+
+/InvScaleFactor 1.0 def
+/set_scale {
+ dup 1 exch div /InvScaleFactor exch def
+ scale
+} bind def
+
+% styles
+/solid { [] 0 setdash } bind def
+/dashed { [9 InvScaleFactor mul dup ] 0 setdash } bind def
+/dotted { [1 InvScaleFactor mul 6 InvScaleFactor mul] 0 setdash } bind def
+/invis {/fill {newpath} def /stroke {newpath} def /show {pop newpath} def} bind def
+/bold { 2 setlinewidth } bind def
+/filled { } bind def
+/unfilled { } bind def
+/rounded { } bind def
+/diagonals { } bind def
+/tapered { } bind def
+
+% hooks for setting color
+/nodecolor { sethsbcolor } bind def
+/edgecolor { sethsbcolor } bind def
+/graphcolor { sethsbcolor } bind def
+/nopcolor {pop pop pop} bind def
+
+/beginpage { % i j npages
+ /npages exch def
+ /j exch def
+ /i exch def
+ /str 10 string def
+ npages 1 gt {
+ gsave
+ coordfont setfont
+ 0 0 moveto
+ (\() show i str cvs show (,) show j str cvs show (\)) show
+ grestore
+ } if
+} bind def
+
+/set_font {
+ findfont exch
+ scalefont setfont
+} def
+
+% draw text fitted to its expected width
+/alignedtext { % width text
+ /text exch def
+ /width exch def
+ gsave
+ width 0 gt {
+ [] 0 setdash
+ text stringwidth pop width exch sub text length div 0 text ashow
+ } if
+ grestore
+} def
+
+/boxprim { % xcorner ycorner xsize ysize
+ 4 2 roll
+ moveto
+ 2 copy
+ exch 0 rlineto
+ 0 exch rlineto
+ pop neg 0 rlineto
+ closepath
+} bind def
+
+/ellipse_path {
+ /ry exch def
+ /rx exch def
+ /y exch def
+ /x exch def
+ matrix currentmatrix
+ newpath
+ x y translate
+ rx ry scale
+ 0 0 1 0 360 arc
+ setmatrix
+} bind def
+
+/endpage { showpage } bind def
+/showpage { } def
+
+/layercolorseq
+ [ % layer color sequence - darkest to lightest
+ [0 0 0]
+ [.2 .8 .8]
+ [.4 .8 .8]
+ [.6 .8 .8]
+ [.8 .8 .8]
+ ]
+def
+
+/layerlen layercolorseq length def
+
+/setlayer {/maxlayer exch def /curlayer exch def
+ layercolorseq curlayer 1 sub layerlen mod get
+ aload pop sethsbcolor
+ /nodecolor {nopcolor} def
+ /edgecolor {nopcolor} def
+ /graphcolor {nopcolor} def
+} bind def
+
+/onlayer { curlayer ne {invis} if } def
+
+/onlayers {
+ /myupper exch def
+ /mylower exch def
+ curlayer mylower lt
+ curlayer myupper gt
+ or
+ {invis} if
+} def
+
+/curlayer 0 def
+
+%%EndResource
+%%EndProlog
+%%BeginSetup
+14 default-font-family set_font
+1 setmiterlimit
+% /arrowlength 10 def
+% /arrowwidth 5 def
+
+% make sure pdfmark is harmless for PS-interpreters other than Distiller
+/pdfmark where {pop} {userdict /pdfmark /cleartomark load put} ifelse
+% make '<<' and '>>' safe on PS Level 1 devices
+/languagelevel where {pop languagelevel}{1} ifelse
+2 lt {
+ userdict (<<) cvn ([) cvn load put
+ userdict (>>) cvn ([) cvn load put
+} if
+
+%%EndSetup
+setupLatin1
+%%Page: 1 1
+%%PageBoundingBox: 36 36 246 150
+%%PageOrientation: Portrait
+0 0 1 beginpage
+gsave
+36 36 210 114 boxprim clip newpath
+1 1 set_scale 0 rotate 40 40 translate
+% 1
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+18 53 18 18 ellipse_path stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+14.5 49.3 moveto 7 (1) alignedtext
+grestore
+% 2
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+97 53 18 18 ellipse_path stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+93.5 49.3 moveto 7 (2) alignedtext
+grestore
+% 1->2
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 36.09 53 moveto
+45.66 53 57.82 53 68.68 53 curveto
+stroke
+0 0 0 edgecolor
+newpath 68.96 56.5 moveto
+78.96 53 lineto
+68.96 49.5 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 68.96 56.5 moveto
+78.96 53 lineto
+68.96 49.5 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+54 56.8 moveto 7 (a) alignedtext
+grestore
+% 3
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+180 84 18 18 ellipse_path stroke
+1 setlinewidth
+0 0 0 nodecolor
+180 84 22 22 ellipse_path stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+176.5 80.3 moveto 7 (3) alignedtext
+grestore
+% 2->3
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 114 59.12 moveto
+124.16 63.01 137.61 68.16 149.64 72.76 curveto
+stroke
+0 0 0 edgecolor
+newpath 148.72 76.16 moveto
+159.31 76.46 lineto
+151.22 69.62 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 148.72 76.16 moveto
+159.31 76.46 lineto
+151.22 69.62 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+133 71.8 moveto 7 (a) alignedtext
+grestore
+% 4
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+180 22 18 18 ellipse_path stroke
+1 setlinewidth
+0 0 0 nodecolor
+180 22 22 22 ellipse_path stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+176.5 18.3 moveto 7 (4) alignedtext
+grestore
+% 2->4
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 114 46.88 moveto
+124.16 42.99 137.61 37.84 149.64 33.24 curveto
+stroke
+0 0 0 edgecolor
+newpath 151.22 36.38 moveto
+159.31 29.54 lineto
+148.72 29.84 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 151.22 36.38 moveto
+159.31 29.54 lineto
+148.72 29.84 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+133 43.8 moveto 7 (b) alignedtext
+grestore
+endpage
+showpage
+grestore
+%%PageTrailer
+%%EndPage: 1
+%%Trailer
+%%Pages: 1
+%%BoundingBox: 36 36 246 150
+end
+restore
+%%EOF
--- /dev/null
+digraph graph22 {
+rankdir=LR;
+1,2,3,5 [shape="circle"];
+5 [shape="doublecircle"];
+1 -> 2 [label="a"];
+2 -> 3 [label="."];
+3 -> 4 [label="b"];
+4 -> 5 [label="c"];
+}
--- /dev/null
+%!PS-Adobe-3.0
+%%Creator: graphviz version 2.38.0 (20140413.2041)
+%%Title: graph22
+%%Pages: (atend)
+%%BoundingBox: (atend)
+%%EndComments
+save
+%%BeginProlog
+/DotDict 200 dict def
+DotDict begin
+
+/setupLatin1 {
+mark
+/EncodingVector 256 array def
+ EncodingVector 0
+
+ISOLatin1Encoding 0 255 getinterval putinterval
+EncodingVector 45 /hyphen put
+
+% Set up ISO Latin 1 character encoding
+/starnetISO {
+ dup dup findfont dup length dict begin
+ { 1 index /FID ne { def }{ pop pop } ifelse
+ } forall
+ /Encoding EncodingVector def
+ currentdict end definefont
+} def
+/Times-Roman starnetISO def
+/Times-Italic starnetISO def
+/Times-Bold starnetISO def
+/Times-BoldItalic starnetISO def
+/Helvetica starnetISO def
+/Helvetica-Oblique starnetISO def
+/Helvetica-Bold starnetISO def
+/Helvetica-BoldOblique starnetISO def
+/Courier starnetISO def
+/Courier-Oblique starnetISO def
+/Courier-Bold starnetISO def
+/Courier-BoldOblique starnetISO def
+cleartomark
+} bind def
+
+%%BeginResource: procset graphviz 0 0
+/coord-font-family /Times-Roman def
+/default-font-family /Times-Roman def
+/coordfont coord-font-family findfont 8 scalefont def
+
+/InvScaleFactor 1.0 def
+/set_scale {
+ dup 1 exch div /InvScaleFactor exch def
+ scale
+} bind def
+
+% styles
+/solid { [] 0 setdash } bind def
+/dashed { [9 InvScaleFactor mul dup ] 0 setdash } bind def
+/dotted { [1 InvScaleFactor mul 6 InvScaleFactor mul] 0 setdash } bind def
+/invis {/fill {newpath} def /stroke {newpath} def /show {pop newpath} def} bind def
+/bold { 2 setlinewidth } bind def
+/filled { } bind def
+/unfilled { } bind def
+/rounded { } bind def
+/diagonals { } bind def
+/tapered { } bind def
+
+% hooks for setting color
+/nodecolor { sethsbcolor } bind def
+/edgecolor { sethsbcolor } bind def
+/graphcolor { sethsbcolor } bind def
+/nopcolor {pop pop pop} bind def
+
+/beginpage { % i j npages
+ /npages exch def
+ /j exch def
+ /i exch def
+ /str 10 string def
+ npages 1 gt {
+ gsave
+ coordfont setfont
+ 0 0 moveto
+ (\() show i str cvs show (,) show j str cvs show (\)) show
+ grestore
+ } if
+} bind def
+
+/set_font {
+ findfont exch
+ scalefont setfont
+} def
+
+% draw text fitted to its expected width
+/alignedtext { % width text
+ /text exch def
+ /width exch def
+ gsave
+ width 0 gt {
+ [] 0 setdash
+ text stringwidth pop width exch sub text length div 0 text ashow
+ } if
+ grestore
+} def
+
+/boxprim { % xcorner ycorner xsize ysize
+ 4 2 roll
+ moveto
+ 2 copy
+ exch 0 rlineto
+ 0 exch rlineto
+ pop neg 0 rlineto
+ closepath
+} bind def
+
+/ellipse_path {
+ /ry exch def
+ /rx exch def
+ /y exch def
+ /x exch def
+ matrix currentmatrix
+ newpath
+ x y translate
+ rx ry scale
+ 0 0 1 0 360 arc
+ setmatrix
+} bind def
+
+/endpage { showpage } bind def
+/showpage { } def
+
+/layercolorseq
+ [ % layer color sequence - darkest to lightest
+ [0 0 0]
+ [.2 .8 .8]
+ [.4 .8 .8]
+ [.6 .8 .8]
+ [.8 .8 .8]
+ ]
+def
+
+/layerlen layercolorseq length def
+
+/setlayer {/maxlayer exch def /curlayer exch def
+ layercolorseq curlayer 1 sub layerlen mod get
+ aload pop sethsbcolor
+ /nodecolor {nopcolor} def
+ /edgecolor {nopcolor} def
+ /graphcolor {nopcolor} def
+} bind def
+
+/onlayer { curlayer ne {invis} if } def
+
+/onlayers {
+ /myupper exch def
+ /mylower exch def
+ curlayer mylower lt
+ curlayer myupper gt
+ or
+ {invis} if
+} def
+
+/curlayer 0 def
+
+%%EndResource
+%%EndProlog
+%%BeginSetup
+14 default-font-family set_font
+1 setmiterlimit
+% /arrowlength 10 def
+% /arrowwidth 5 def
+
+% make sure pdfmark is harmless for PS-interpreters other than Distiller
+/pdfmark where {pop} {userdict /pdfmark /cleartomark load put} ifelse
+% make '<<' and '>>' safe on PS Level 1 devices
+/languagelevel where {pop languagelevel}{1} ifelse
+2 lt {
+ userdict (<<) cvn ([) cvn load put
+ userdict (>>) cvn ([) cvn load put
+} if
+
+%%EndSetup
+setupLatin1
+%%Page: 1 1
+%%PageBoundingBox: 36 36 419 88
+%%PageOrientation: Portrait
+0 0 1 beginpage
+gsave
+36 36 383 52 boxprim clip newpath
+1 1 set_scale 0 rotate 40 40 translate
+% 1
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+18 22 18 18 ellipse_path stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+14.5 18.3 moveto 7 (1) alignedtext
+grestore
+% 2
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+97 22 18 18 ellipse_path stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+93.5 18.3 moveto 7 (2) alignedtext
+grestore
+% 1->2
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 36.09 22 moveto
+45.66 22 57.82 22 68.68 22 curveto
+stroke
+0 0 0 edgecolor
+newpath 68.96 25.5 moveto
+78.96 22 lineto
+68.96 18.5 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 68.96 25.5 moveto
+78.96 22 lineto
+68.96 18.5 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+54 25.8 moveto 7 (a) alignedtext
+grestore
+% 3
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+173 22 18 18 ellipse_path stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+169.5 18.3 moveto 7 (3) alignedtext
+grestore
+% 2->3
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 115.16 22 moveto
+123.94 22 134.84 22 144.73 22 curveto
+stroke
+0 0 0 edgecolor
+newpath 144.93 25.5 moveto
+154.93 22 lineto
+144.93 18.5 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 144.93 25.5 moveto
+154.93 22 lineto
+144.93 18.5 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+133 25.8 moveto 4 (.) alignedtext
+grestore
+% 4
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+261 22 27 18 ellipse_path stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+257.5 18.3 moveto 7 (4) alignedtext
+grestore
+% 3->4
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 191.4 22 moveto
+200.72 22 212.56 22 223.77 22 curveto
+stroke
+0 0 0 edgecolor
+newpath 223.8 25.5 moveto
+233.8 22 lineto
+223.8 18.5 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 223.8 25.5 moveto
+233.8 22 lineto
+223.8 18.5 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+209 25.8 moveto 7 (b) alignedtext
+grestore
+% 5
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+353 22 18 18 ellipse_path stroke
+1 setlinewidth
+0 0 0 nodecolor
+353 22 22 22 ellipse_path stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+349.5 18.3 moveto 7 (5) alignedtext
+grestore
+% 4->5
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 288.03 22 moveto
+298.23 22 310.03 22 320.69 22 curveto
+stroke
+0 0 0 edgecolor
+newpath 320.87 25.5 moveto
+330.87 22 lineto
+320.87 18.5 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 320.87 25.5 moveto
+330.87 22 lineto
+320.87 18.5 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+306 25.8 moveto 7 (c) alignedtext
+grestore
+endpage
+showpage
+grestore
+%%PageTrailer
+%%EndPage: 1
+%%Trailer
+%%Pages: 1
+%%BoundingBox: 36 36 419 88
+end
+restore
+%%EOF
--- /dev/null
+digraph graph23 {
+rankdir=LR;
+1,2,3,5,6 [shape="circle"];
+5 [shape="doublecircle"];
+1 -> 2 [label="a"];
+2 -> 3 [label="."];
+3 -> 4 [label="b"];
+4 -> 5 [label="c"];
+
+2 -> 6 [label=","];
+6 -> 4 [label="b"];
+}
--- /dev/null
+%!PS-Adobe-3.0
+%%Creator: graphviz version 2.38.0 (20140413.2041)
+%%Title: graph23
+%%Pages: (atend)
+%%BoundingBox: (atend)
+%%EndComments
+save
+%%BeginProlog
+/DotDict 200 dict def
+DotDict begin
+
+/setupLatin1 {
+mark
+/EncodingVector 256 array def
+ EncodingVector 0
+
+ISOLatin1Encoding 0 255 getinterval putinterval
+EncodingVector 45 /hyphen put
+
+% Set up ISO Latin 1 character encoding
+/starnetISO {
+ dup dup findfont dup length dict begin
+ { 1 index /FID ne { def }{ pop pop } ifelse
+ } forall
+ /Encoding EncodingVector def
+ currentdict end definefont
+} def
+/Times-Roman starnetISO def
+/Times-Italic starnetISO def
+/Times-Bold starnetISO def
+/Times-BoldItalic starnetISO def
+/Helvetica starnetISO def
+/Helvetica-Oblique starnetISO def
+/Helvetica-Bold starnetISO def
+/Helvetica-BoldOblique starnetISO def
+/Courier starnetISO def
+/Courier-Oblique starnetISO def
+/Courier-Bold starnetISO def
+/Courier-BoldOblique starnetISO def
+cleartomark
+} bind def
+
+%%BeginResource: procset graphviz 0 0
+/coord-font-family /Times-Roman def
+/default-font-family /Times-Roman def
+/coordfont coord-font-family findfont 8 scalefont def
+
+/InvScaleFactor 1.0 def
+/set_scale {
+ dup 1 exch div /InvScaleFactor exch def
+ scale
+} bind def
+
+% styles
+/solid { [] 0 setdash } bind def
+/dashed { [9 InvScaleFactor mul dup ] 0 setdash } bind def
+/dotted { [1 InvScaleFactor mul 6 InvScaleFactor mul] 0 setdash } bind def
+/invis {/fill {newpath} def /stroke {newpath} def /show {pop newpath} def} bind def
+/bold { 2 setlinewidth } bind def
+/filled { } bind def
+/unfilled { } bind def
+/rounded { } bind def
+/diagonals { } bind def
+/tapered { } bind def
+
+% hooks for setting color
+/nodecolor { sethsbcolor } bind def
+/edgecolor { sethsbcolor } bind def
+/graphcolor { sethsbcolor } bind def
+/nopcolor {pop pop pop} bind def
+
+/beginpage { % i j npages
+ /npages exch def
+ /j exch def
+ /i exch def
+ /str 10 string def
+ npages 1 gt {
+ gsave
+ coordfont setfont
+ 0 0 moveto
+ (\() show i str cvs show (,) show j str cvs show (\)) show
+ grestore
+ } if
+} bind def
+
+/set_font {
+ findfont exch
+ scalefont setfont
+} def
+
+% draw text fitted to its expected width
+/alignedtext { % width text
+ /text exch def
+ /width exch def
+ gsave
+ width 0 gt {
+ [] 0 setdash
+ text stringwidth pop width exch sub text length div 0 text ashow
+ } if
+ grestore
+} def
+
+/boxprim { % xcorner ycorner xsize ysize
+ 4 2 roll
+ moveto
+ 2 copy
+ exch 0 rlineto
+ 0 exch rlineto
+ pop neg 0 rlineto
+ closepath
+} bind def
+
+/ellipse_path {
+ /ry exch def
+ /rx exch def
+ /y exch def
+ /x exch def
+ matrix currentmatrix
+ newpath
+ x y translate
+ rx ry scale
+ 0 0 1 0 360 arc
+ setmatrix
+} bind def
+
+/endpage { showpage } bind def
+/showpage { } def
+
+/layercolorseq
+ [ % layer color sequence - darkest to lightest
+ [0 0 0]
+ [.2 .8 .8]
+ [.4 .8 .8]
+ [.6 .8 .8]
+ [.8 .8 .8]
+ ]
+def
+
+/layerlen layercolorseq length def
+
+/setlayer {/maxlayer exch def /curlayer exch def
+ layercolorseq curlayer 1 sub layerlen mod get
+ aload pop sethsbcolor
+ /nodecolor {nopcolor} def
+ /edgecolor {nopcolor} def
+ /graphcolor {nopcolor} def
+} bind def
+
+/onlayer { curlayer ne {invis} if } def
+
+/onlayers {
+ /myupper exch def
+ /mylower exch def
+ curlayer mylower lt
+ curlayer myupper gt
+ or
+ {invis} if
+} def
+
+/curlayer 0 def
+
+%%EndResource
+%%EndProlog
+%%BeginSetup
+14 default-font-family set_font
+1 setmiterlimit
+% /arrowlength 10 def
+% /arrowwidth 5 def
+
+% make sure pdfmark is harmless for PS-interpreters other than Distiller
+/pdfmark where {pop} {userdict /pdfmark /cleartomark load put} ifelse
+% make '<<' and '>>' safe on PS Level 1 devices
+/languagelevel where {pop languagelevel}{1} ifelse
+2 lt {
+ userdict (<<) cvn ([) cvn load put
+ userdict (>>) cvn ([) cvn load put
+} if
+
+%%EndSetup
+setupLatin1
+%%Page: 1 1
+%%PageBoundingBox: 36 36 419 134
+%%PageOrientation: Portrait
+0 0 1 beginpage
+gsave
+36 36 383 98 boxprim clip newpath
+1 1 set_scale 0 rotate 40 40 translate
+% 1
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+18 47 18 18 ellipse_path stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+14.5 43.3 moveto 7 (1) alignedtext
+grestore
+% 2
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+97 47 18 18 ellipse_path stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+93.5 43.3 moveto 7 (2) alignedtext
+grestore
+% 1->2
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 36.09 47 moveto
+45.66 47 57.82 47 68.68 47 curveto
+stroke
+0 0 0 edgecolor
+newpath 68.96 50.5 moveto
+78.96 47 lineto
+68.96 43.5 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 68.96 50.5 moveto
+78.96 47 lineto
+68.96 43.5 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+54 50.8 moveto 7 (a) alignedtext
+grestore
+% 3
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+173 72 18 18 ellipse_path stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+169.5 68.3 moveto 7 (3) alignedtext
+grestore
+% 2->3
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 114.42 52.55 moveto
+123.72 55.69 135.55 59.69 146.07 63.24 curveto
+stroke
+0 0 0 edgecolor
+newpath 145.03 66.58 moveto
+155.62 66.47 lineto
+147.27 59.95 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 145.03 66.58 moveto
+155.62 66.47 lineto
+147.27 59.95 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+133 62.8 moveto 4 (.) alignedtext
+grestore
+% 6
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+173 18 18 18 ellipse_path stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+169.5 14.3 moveto 7 (6) alignedtext
+grestore
+% 2->6
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 114.06 40.71 moveto
+123.56 36.98 135.81 32.18 146.6 27.95 curveto
+stroke
+0 0 0 edgecolor
+newpath 147.94 31.19 moveto
+155.97 24.28 lineto
+145.39 24.67 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 147.94 31.19 moveto
+155.97 24.28 lineto
+145.39 24.67 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+133 35.8 moveto 4 (,) alignedtext
+grestore
+% 4
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+261 47 27 18 ellipse_path stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+257.5 43.3 moveto 7 (4) alignedtext
+grestore
+% 3->4
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 190.58 67.18 moveto
+200.65 64.25 213.87 60.41 226.07 56.86 curveto
+stroke
+0 0 0 edgecolor
+newpath 227.36 60.13 moveto
+235.99 53.98 lineto
+225.41 53.41 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 227.36 60.13 moveto
+235.99 53.98 lineto
+225.41 53.41 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+209 64.8 moveto 7 (b) alignedtext
+grestore
+% 5
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+353 47 18 18 ellipse_path stroke
+1 setlinewidth
+0 0 0 nodecolor
+353 47 22 22 ellipse_path stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+349.5 43.3 moveto 7 (5) alignedtext
+grestore
+% 6->4
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 190.18 23.45 moveto
+200.47 26.92 214.17 31.54 226.71 35.77 curveto
+stroke
+0 0 0 edgecolor
+newpath 225.83 39.17 moveto
+236.43 39.05 lineto
+228.07 32.54 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 225.83 39.17 moveto
+236.43 39.05 lineto
+228.07 32.54 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+209 34.8 moveto 7 (b) alignedtext
+grestore
+% 4->5
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 288.03 47 moveto
+298.23 47 310.03 47 320.69 47 curveto
+stroke
+0 0 0 edgecolor
+newpath 320.87 50.5 moveto
+330.87 47 lineto
+320.87 43.5 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 320.87 50.5 moveto
+330.87 47 lineto
+320.87 43.5 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+306 50.8 moveto 7 (c) alignedtext
+grestore
+endpage
+showpage
+grestore
+%%PageTrailer
+%%EndPage: 1
+%%Trailer
+%%Pages: 1
+%%BoundingBox: 36 36 419 134
+end
+restore
+%%EOF
--- /dev/null
+\begin{thebibliography}{1}
+
+\bibitem{Daciuk2000}
+Jan Daciuk, Stoyan Mihov, Bruce~W. Watson, and Richard~E. Watson.
+\newblock {Incremental Construction of Minimal Acyclic Finite-State Automata}.
+\newblock {\em Computational Linguistics}, 26(1):3--16, March 2000.
+
+\bibitem{Hopcroft1971}
+John Hopcroft.
+\newblock {An N log N algorithm for minimizing states in a finite automaton}.
+\newblock Technical report, 1971.
+
+\bibitem{Roelofs2009}
+Wouter Roelofs, Alessandro~Tadeo Paula, and Franc Grootjen.
+\newblock {Programming by Clicking}.
+\newblock In {\em Proceedings of the Dutch Information Retrieval Conference},
+ pages 2--3, 2009.
+
+\end{thebibliography}
--- /dev/null
+This is BibTeX, Version 0.99d (TeX Live 2015/dev/Debian)
+Capacity: max_strings=35307, hash_size=35307, hash_prime=30011
+The top-level auxiliary file: thesis.aux
+The style file: plain.bst
+Database file #1: thesis.bib
+Warning--empty institution in Hopcroft1971
+You've used 3 entries,
+ 2118 wiz_defined-function locations,
+ 516 strings with 4464 characters,
+and the built_in function-call counts, 993 in all, are:
+= -- 95
+> -- 48
+< -- 1
++ -- 19
+- -- 16
+* -- 70
+:= -- 173
+add.period$ -- 9
+call.type$ -- 3
+change.case$ -- 18
+chr.to.int$ -- 0
+cite$ -- 4
+duplicate$ -- 38
+empty$ -- 75
+format.name$ -- 16
+if$ -- 202
+int.to.chr$ -- 0
+int.to.str$ -- 3
+missing$ -- 2
+newline$ -- 18
+num.names$ -- 6
+pop$ -- 18
+preamble$ -- 1
+purify$ -- 14
+quote$ -- 0
+skip$ -- 26
+stack$ -- 0
+substring$ -- 47
+swap$ -- 8
+text.length$ -- 1
+text.prefix$ -- 0
+top$ -- 0
+type$ -- 12
+warning$ -- 1
+while$ -- 11
+width$ -- 4
+write$ -- 34
+(There was 1 warning)