+++ /dev/null
-(dp0
-S'dedoelen'
-p1
-(dp2
-S'website'
-p3
-S'www.dedoelen.nl'
-p4
-sS'name'
-p5
-g1
-sS'titledawg'
-p6
-(ipydawg
-DAWG
-p7
-(dp8
-S'q0'
-p9
-(ipydawg
-DAWGNode
-p10
-(dp11
-S'children'
-p12
-(dp13
-S'\x01'
-p14
-(ipydawg
-DAWGNode
-p15
-(dp16
-g12
-(dp17
-S','
-p18
-(ipydawg
-DAWGNode
-p19
-(dp20
-g12
-(dp21
-S' '
-p22
-(ipydawg
-DAWGNode
-p23
-(dp24
-g12
-(dp25
-S'\x02'
-p26
-(ipydawg
-DAWGNode
-p27
-(dp28
-g12
-(dp29
-g22
-(ipydawg
-DAWGNode
-p30
-(dp31
-g12
-(dp32
-S'u'
-p33
-(ipydawg
-DAWGNode
-p34
-(dp35
-g12
-(dp36
-g33
-(ipydawg
-DAWGNode
-p37
-(dp38
-g12
-(dp39
-S'r'
-p40
-(ipydawg
-DAWGNode
-p41
-(dp42
-g12
-(dp43
-g22
-(ipydawg
-DAWGNode
-p44
-(dp45
-g12
-(dp46
-S'-'
-p47
-(ipydawg
-DAWGNode
-p48
-(dp49
-g12
-(dp50
-g22
-(ipydawg
-DAWGNode
-p51
-(dp52
-g12
-(dp53
-S'\x03'
-p54
-(ipydawg
-DAWGNode
-p55
-(dp56
-g12
-(dp57
-sS'final'
-p58
-I01
-sS'number'
-p59
-Nsbssg58
-I00
-sg59
-Nsbssg58
-I00
-sg59
-Nsbssg58
-I00
-sg59
-Nsbssg58
-I00
-sg59
-Nsbssg58
-I00
-sg59
-Nsbssg58
-I00
-sg59
-Nsbssg58
-I00
-sg59
-Nsbssg58
-I00
-sg59
-Nsbssg58
-I00
-sg59
-Nsbssg58
-I00
-sg59
-Nsbssg58
-I00
-sg59
-Nsbssg58
-I00
-sg59
-NsbsS'_numbers_valid'
-p60
-I00
-sS'register'
-p61
-c__builtin__
-set
-p62
-((lp63
-tp64
-Rp65
-sS'wp'
-p66
-S'\x01, \x02 uur - \x03'
-p67
-sbsS'dloc'
-p68
-S'Grote zaal'
-p69
-sS'venue'
-p70
-S'De Doelen'
-p71
-sS'content'
-p72
-(lp73
-(lp74
-S'<span class="uiWebviewHighlight" style="color: white; background-color: rgb(139, 0, 0);">za 16 aug</span>, <span class="uiWebviewHighlight" style="color: white; background-color: red;">20.15</span> uur - <span class="uiWebviewHighlight" style="color: white; background-color: green;">Elvis & More 2014 - Ren\xc3\xa9 Shuman & Angel-Eye</span>'
-p75
-aS'<b>Ode aan 60 jaar rock-and-roll door Ren\xc3\xa9 Shuman & Angel-Eye</b><br>In 1954 werd de song That\xe2\x80\x99s allright mama door Elvis Presley, The King of Rock and Roll, opgenomen en uitgebracht. Het duo Ren\xc3\xa9 Shuman & Angel-Eye houdt zijn muziek in ere met hun theatershows, tv-specials en opnamen. Ze trekken met hun showband volle zalen met hun Rock and Roll-vertolkingen. En jaarlijks geeft het duo een bijzonder concert op 16 augustus, de sterfdag van Elvis.<br><br>Ren\xc3\xa9: \xe2\x80\x98Dit jaar zal ons Elvis & More-concert plaatsvinden in de Doelen, de grootste klassieke concertzaal van Nederland met een prachtige akoestiek. We willen onze fans trakteren op een energieke en mooie show met subliem geluid en comfortabele zitplaatsen. Een hele avond genieten van 60 jaar Rock and Roll-geschiedenis!\xe2\x80\x99<br><br><ul><li><a href="http://www.elvisandmore.com" target="_blank">www.elvisandmore.com</a></li></ul>'
-p76
-aa(lp77
-S'<span class="uiWebviewHighlight" style="color: white; background-color: rgb(139, 0, 0);">vr 05 sep</span>, <span class="uiWebviewHighlight" style="color: white; background-color: red;">20.00</span> uur - <span class="uiWebviewHighlight" style="color: white; background-color: green;">Night of Ziryab - Amsterdams Andalusisch Orkest i.s.m. Orchestre Temsamani (Tetuan)</span>'
-p78
-aS''
-p79
-aa(lp80
-S'vr 12 sep, 13.00 uur - Rotterdam Philharmonic Gergiev Festival - Locatietheater | Niemandsland (I)'
-p81
-aS'Rode draad door het Gergiev Festival vormt de muziektheatervoorstelling \xe2\x80\x98Niemandsland\xe2\x80\x99 van regisseur Serge van Veggel. Een veteraan haalt herinneringen op aan zijn oorlogsverleden, dat in donkere kelders opeens weer heel dichtbij lijkt te komen. Hij symboliseert de \xe2\x80\x98Onbekende Soldaat\xe2\x80\x99 in een collage van originele dagboekfragmenten en gedichten, liedjes of soms absurde oorlogsverhalen. Muziek komt van het theatrale Ragazze Kwartet: gaandeweg zal de sublieme eenheid van het klassieke strijkkwartet door de toenemende chaos steeds meer verbrokkelen.<br><br>\xe2\x80\x98...hoe je met weinig middelen schitterende sc\xc3\xa8nes kunt bouwen\xe2\x80\x99 - NRC Handelsblad over het locatietheater van regisseur Serge van Veggel.<br><br>Deze voorstelling wordt georganiseerd in samenwerking met het muziektheatergezelschap OPERA2DAY.<br><br>Locatietheater met als startpunt de Eduard Flipse Zaal. De voorstelling bestaat uit twee gedeelten. Het tweede gedeelte is niet goed te bezoeken voor hen die slecht ter been zijn of voor rolstoelgebruikers.<br><br><ul><li><a href="http://www.gergievfestival.nl" target="_blank">www.gergievfestival.nl</a></li></ul>'
-p82
-aa(lp83
-S'vr 12 sep, 14.30 uur - Rotterdam Philharmonic Gergiev Festival - Locatietheater | Niemandsland (II)'
-p84
-aS'Rode draad door het Gergiev Festival vormt de muziektheatervoorstelling \xe2\x80\x98Niemandsland\xe2\x80\x99 van regisseur Serge van Veggel. Een veteraan haalt herinneringen op aan zijn oorlogsverleden, dat in donkere kelders opeens weer heel dichtbij lijkt te komen. Hij symboliseert de \xe2\x80\x98Onbekende Soldaat\xe2\x80\x99 in een collage van originele dagboekfragmenten en gedichten, liedjes of soms absurde oorlogsverhalen. Muziek komt van het theatrale Ragazze Kwartet: gaandeweg zal de sublieme eenheid van het klassieke strijkkwartet door de toenemende chaos steeds meer verbrokkelen.<br><br>\xe2\x80\x98...hoe je met weinig middelen schitterende sc\xc3\xa8nes kunt bouwen\xe2\x80\x99 - NRC Handelsblad over het locatietheater van regisseur Serge van Veggel.<br><br>Deze voorstelling wordt georganiseerd in samenwerking met het muziektheatergezelschap OPERA2DAY.<br><br>Locatietheater met als startpunt de Eduard Flipse Zaal. De voorstelling bestaat uit twee gedeelten. Het tweede gedeelte is niet goed te bezoeken voor hen die slecht ter been zijn of voor rolstoelgebruikers.<br><br><ul><li><a href="http://www.gergievfestival.nl" target="_blank">www.gergievfestival.nl</a></li></ul>'
-p85
-aa(lp86
-S'vr 12 sep, 16.00 uur - Rotterdam Philharmonic Gergiev Festival - Ensemble Calliop\xc3\xa9e | Les musiciennes dans la Grande Guerre'
-p87
-aS'Vrouwen speelden tijdens de oorlog een grote rol aan het thuisfront: de oorlog bleek ook een onverwachte emancipatieslag voor de achterblijvers. Ensemble Calliop\xc3\xa9e, gespecialiseerd in repertoire uit het begin van de 20ste eeuw, verkent de rol van (Franse) vrouwen in de muziek uit die tijd.<br><br>\xe2\x80\x98De voortreffelijke solisten van Ensemble Calliop\xc3\xa9e brengen gerechtigheid voor deze onbekende componist, en ontrukken hem aan de vergetelheid met hun precisie, hun klankkwaliteit en hun hechte samenspel\xe2\x80\x99 - Classica over de muziek van Durosoir, gespeeld door Ensemble Calliop\xc3\xa9e.<br><br><ul><li><a href="http://www.gergievfestival.nl" target="_blank">www.gergievfestival.nl</a></li></ul>'
-p88
-aa(lp89
-S'vr 12 sep, 19.00 uur - Rotterdam Philharmonic Gergiev Festival - Lezing | Het Westfront'
-p90
-aS'Inleiding op het symfonisch concert door historicus en publicist Paul Knevel.<br><br><ul><li><a href="http://www.gergievfestival.nl" target="_blank">www.gergievfestival.nl</a></li></ul>'
-p91
-aa(lp92
-S'vr 12 sep, 20.15 uur - Rotterdam Philharmonic Gergiev Festival - Openingsconcert Rotterdams Philharmonisch | Het Westfront'
-p93
-aS'Is Prokofjevs verblindende Scythische Suite (1915) een luidruchtige vorm van escapisme of een symbolisch commentaar op het oorlogsgeweld? Tijdens de oorlog dook Bart\xc3\xb3k onder in zijn \xe2\x80\x93 zeer welluidende \xe2\x80\x93 balletpantomime De houten prins. Ravel, die het Westfront van nabij meemaakte, schreef zijn duistere Pianoconcert voor de linkerhand voor pianist Paul Wittgenstein die in de oorlog zijn rechterarm verloor.<br><br>\xe2\x80\x98Raffinement, hartstocht, verzengende gloed en kleurrijke licht-effecten... een uitvoering waarin de absolute top werd bereikt\xe2\x80\x99 - Trouw over Prokofjevs Scythische Suite door het Rotterdams Philharmonisch Orkest met Valery Gergiev<br><br>Let op! Houdt u bij het kiezen van uw stoel rekening met het volgende:<br>Op de orgelring heeft u geen zicht op de korte filmfragmenten die tijdens changementen en/of voorafgaand aan het concert worden vertoond. Op de podiumring links en rechts heeft u mogelijk slecht zicht op de korte filmfragmenten die tijdens changementen en/of voorafgaand aan het concert worden vertoond.<br><br><ul><li><a href="http://www.gergievfestival.nl" target="_blank">www.gergievfestival.nl</a></li></ul>'
-p94
-aa(lp95
-S'vr 12 sep, 23.00 uur - Rotterdam Philharmonic Gergiev Festival - Laurens Collegium Rotterdam | Eeuwig oorlogsleed'
-p96
-aS'Na het orkestrale geweld volgt een introvert koorprogramma op de late avond. Muzikale meditaties betreuren het eeuwig oorlogsleed, het concert wordt afgesloten met een indringende hartekreet: Vrede op aarde! <br><br>\xe2\x80\x98Om tot in het oneindige naar te luisteren!\xe2\x80\x99 - Elsevier over het Laurens Collegium Rotterdam<br><br><ul><li><a href="http://www.gergievfestival.nl" target="_blank">www.gergievfestival.nl</a></li></ul>'
-p97
-aa(lp98
-S'za 13 sep, 11.00 uur - Rotterdam Philharmonic Gergiev Festival - Locatietheater | Niemandsland (III)'
-p99
-aS'Rode draad door het Gergiev Festival vormt de muziektheatervoorstelling \xe2\x80\x98Niemandsland\xe2\x80\x99 van regisseur Serge van Veggel. Een veteraan haalt herinneringen op aan zijn oorlogsverleden, dat in donkere kelders opeens weer heel dichtbij lijkt te komen. Hij symboliseert de \xe2\x80\x98Onbekende Soldaat\xe2\x80\x99 in een collage van originele dagboekfragmenten en gedichten, liedjes of soms absurde oorlogsverhalen. Muziek komt van het theatrale Ragazze Kwartet: gaandeweg zal de sublieme eenheid van het klassieke strijkkwartet door de toenemende chaos steeds meer verbrokkelen.<br><br>\xe2\x80\x98...hoe je met weinig middelen schitterende sc\xc3\xa8nes kunt bouwen\xe2\x80\x99 - NRC Handelsblad over het locatietheater van regisseur Serge van Veggel.<br><br>Deze voorstelling wordt georganiseerd in samenwerking met het muziektheatergezelschap OPERA2DAY.<br><br>Locatietheater met als startpunt de Eduard Flipse Zaal. De voorstelling bestaat uit twee gedeelten. Het tweede gedeelte is niet goed te bezoeken voor hen die slecht ter been zijn of voor rolstoelgebruikers.<br><br><ul><li><a href="http://www.gergievfestival.nl" target="_blank">www.gergievfestival.nl</a></li></ul>'
-p100
-aa(lp101
-S'za 13 sep, 12.30 uur - Rotterdam Philharmonic Gergiev Festival - Locatietheater | Niemandsland (IV)'
-p102
-aS'Rode draad door het Gergiev Festival vormt de muziektheatervoorstelling \xe2\x80\x98Niemandsland\xe2\x80\x99 van regisseur Serge van Veggel. Een veteraan haalt herinneringen op aan zijn oorlogsverleden, dat in donkere kelders opeens weer heel dichtbij lijkt te komen. Hij symboliseert de \xe2\x80\x98Onbekende Soldaat\xe2\x80\x99 in een collage van originele dagboekfragmenten en gedichten, liedjes of soms absurde oorlogsverhalen. Muziek komt van het theatrale Ragazze Kwartet: gaandeweg zal de sublieme eenheid van het klassieke strijkkwartet door de toenemende chaos steeds meer verbrokkelen.<br><br>\xe2\x80\x98...hoe je met weinig middelen schitterende sc\xc3\xa8nes kunt bouwen\xe2\x80\x99 - NRC Handelsblad over het locatietheater van regisseur Serge van Veggel.<br><br>Deze voorstelling wordt georganiseerd in samenwerking met het muziektheatergezelschap OPERA2DAY.<br><br>Locatietheater met als startpunt de Eduard Flipse Zaal. De voorstelling bestaat uit twee gedeelten. Het tweede gedeelte is niet goed te bezoeken voor hen die slecht ter been zijn of voor rolstoelgebruikers.<br><br><ul><li><a href="http://www.gergievfestival.nl" target="_blank">www.gergievfestival.nl</a></li></ul>'
-p103
-aasS'headers'
-p104
-(lp105
-S'Title'
-p106
-aS'Summary'
-p107
-asS'summarydawg'
-p108
-(ipydawg
-DAWG
-p109
-(dp110
-g9
-(ipydawg
-DAWGNode
-p111
-(dp112
-g12
-(dp113
-sg58
-I00
-sg59
-Nsbsg60
-I00
-sg61
-g62
-((lp114
-tp115
-Rp116
-sg66
-g79
-sbsS'freq'
-p117
-S'1d'
-p118
-sS'adress'
-p119
-S'Straat 1 Eindhoven'
-p120
-ssS'paradiso'
-p121
-(dp122
-S'name'
-p123
-g121
-sS'titledawg'
-p124
-(ipydawg
-DAWG
-p125
-(dp126
-g9
-(ipydawg
-DAWGNode
-p127
-(dp128
-g59
-Nsg12
-(dp129
-S'\x01'
-p130
-(ipydawg
-DAWGNode
-p131
-(dp132
-g59
-Nsg12
-(dp133
-S' '
-p134
-(ipydawg
-DAWGNode
-p135
-(dp136
-g59
-Nsg12
-(dp137
-S'\x02'
-p138
-(ipydawg
-DAWGNode
-p139
-(dp140
-g59
-Nsg12
-(dp141
-g134
-(ipydawg
-DAWGNode
-p142
-(dp143
-g59
-Nsg12
-(dp144
-S'-'
-p145
-(ipydawg
-DAWGNode
-p146
-(dp147
-g59
-Nsg12
-(dp148
-g134
-(ipydawg
-DAWGNode
-p149
-(dp150
-g59
-Nsg12
-(dp151
-S'\x03'
-p152
-(ipydawg
-DAWGNode
-p153
-(dp154
-g59
-Nsg12
-(dp155
-g134
-(ipydawg
-DAWGNode
-p156
-(dp157
-g59
-Nsg12
-(dp158
-g134
-(ipydawg
-DAWGNode
-p159
-(dp160
-g59
-Nsg12
-(dp161
-g134
-(ipydawg
-DAWGNode
-p162
-(dp163
-g59
-Nsg12
-(dp164
-g145
-(ipydawg
-DAWGNode
-p165
-(dp166
-g59
-Nsg12
-(dp167
-g134
-(ipydawg
-DAWGNode
-p168
-(dp169
-g59
-Nsg12
-(dp170
-g134
-(ipydawg
-DAWGNode
-p171
-(dp172
-g59
-Nsg12
-(dp173
-g134
-(ipydawg
-DAWGNode
-p174
-(dp175
-g59
-Nsg12
-(dp176
-S'L'
-p177
-(ipydawg
-DAWGNode
-p178
-(dp179
-g59
-Nsg12
-(dp180
-S'o'
-p181
-(ipydawg
-DAWGNode
-p182
-(dp183
-g59
-Nsg12
-(dp184
-S'c'
-p185
-(ipydawg
-DAWGNode
-p186
-(dp187
-g59
-Nsg12
-(dp188
-S'a'
-p189
-(ipydawg
-DAWGNode
-p190
-(dp191
-g59
-Nsg12
-(dp192
-S't'
-p193
-(ipydawg
-DAWGNode
-p194
-(dp195
-g59
-Nsg12
-(dp196
-S'i'
-p197
-(ipydawg
-DAWGNode
-p198
-(dp199
-g59
-Nsg12
-(dp200
-S'e'
-p201
-(ipydawg
-DAWGNode
-p202
-(dp203
-g59
-Nsg12
-(dp204
-S':'
-p205
-(ipydawg
-DAWGNode
-p206
-(dp207
-g59
-Nsg12
-(dp208
-g134
-(ipydawg
-DAWGNode
-p209
-(dp210
-g59
-Nsg12
-(dp211
-S'\x04'
-p212
-(ipydawg
-DAWGNode
-p213
-(dp214
-g59
-Nsg12
-(dp215
-sg58
-I01
-sbssg58
-I00
-sbssg58
-I00
-sbssg58
-I00
-sbssg58
-I00
-sbssg58
-I00
-sbssg58
-I00
-sbssg58
-I00
-sbssg58
-I00
-sbssg58
-I00
-sbssg58
-I00
-sbssg58
-I00
-sbssg58
-I00
-sbssg58
-I00
-sbssg58
-I00
-sbssg58
-I00
-sbssg58
-I00
-sbssg58
-I01
-sbssg58
-I00
-sbssg58
-I00
-sbssg58
-I00
-sbssg58
-I00
-sbssg58
-I00
-sbssg58
-I00
-sbssg58
-I00
-sbsg60
-I00
-sg61
-g62
-((lp216
-tp217
-Rp218
-sg66
-S'\x01 \x02 - \x03 - Locatie: \x04'
-p219
-sbsS'content'
-p220
-(lp221
-(lp222
-S'zaterdag 31 mei 2014 - Lentekabinet Festival Afterparty - Locatie: Tolhuistuin (zaal)'
-p223
-ag79
-aa(lp224
-S'<span class="uiWebviewHighlight" style="color: white; background-color: rgb(139, 0, 0);">vrijdag 4 juli 2014</span> <span class="uiWebviewHighlight" style="color: white; background-color: red;">20:30</span> - <span class="uiWebviewHighlight" style="color: white; background-color: green;">The Crimson Projekct</span> - Locatie: <span class="uiWebviewHighlight" style="color: white; background-color: blue;">Tolhuistuin (zaal)</span>'
-p225
-aS'Muziek rond King Crimson'
-p226
-aa(lp227
-S'<span class="uiWebviewHighlight" style="color: white; background-color: rgb(139, 0, 0);">dinsdag 10 juni 2014</span> <span class="uiWebviewHighlight" style="color: white; background-color: red;">20:30</span> - <span class="uiWebviewHighlight" style="color: white; background-color: green;">Het Ultieme Natuurkunde Feestje \xe2\x80\x93 keynote Amanda Gefter</span>'
-p228
-ag79
-aa(lp229
-S'dinsdag 12 augustus 2014 21:00 - Kevin Drew - Locatie: Bitterzoet'
-p230
-aS'mede-oprichter Broken Social Scene solo'
-p231
-aa(lp232
-S'<span class="uiWebviewHighlight" style="color: white; background-color: rgb(139, 0, 0);">vrijdag 4 juli 2014</span> <span class="uiWebviewHighlight" style="color: white; background-color: red;">22:00</span> - <span class="uiWebviewHighlight" style="color: white; background-color: green;">Palenke Soultribe</span>'
-p233
-aS'Electronische muziek en Afro-Colombiaanse ritmes'
-p234
-aa(lp235
-S'maandag 3 november 2014 20:15 - Eefje de Visser: Waterwereldsteden - Locatie: Het Concertgebouw'
-p236
-ag79
-aa(lp237
-S'zaterdag 27 september 2014 20:30 - A Great Big World - Locatie: Tolhuistuin (zaal)'
-p238
-aS'Hitschrijvers uit New York'
-p239
-aa(lp240
-S'zaterdag 7 juni 2014 23:00 - Benefietavond Marokkaanse Boot'
-p241
-aS'Van Amsterdam naar Tanger'
-p242
-aa(lp243
-S'donderdag 13 november 2014 19:30 - Wouter Hamel'
-p244
-aS'Sprankelende jazzy pop'
-p245
-aa(lp246
-S'vrijdag 13 juni 2014 00:00 - Legends'
-p247
-ag79
-aasS'headers'
-p248
-(lp249
-S'Title'
-p250
-aS'Summary'
-p251
-asS'summarydawg'
-p252
-(ipydawg
-DAWG
-p253
-(dp254
-g9
-(ipydawg
-DAWGNode
-p255
-(dp256
-g59
-Nsg12
-(dp257
-sg58
-I00
-sbsg60
-I00
-sg61
-g62
-((lp258
-tp259
-Rp260
-sg66
-g79
-sbss.
\ No newline at end of file
import sys
+URL_REG = re.compile(
+ ur'(?i)\b((?:https?://|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:\'".,<>?\xab\xbb\u201c\u201d\u2018\u2019]))')
+
+
class Crawler():
def __init__(self, dbfile='./crawler.db'):
if not os.path.exists(dbfile):
'(?P<waar{}>.+)'.format(i))
w = re.sub('\s+', '\\s+', w)
r_s.append(w)
-# r_t = '' if not r_t else '({})'.format('|'.join(
-# reversed(sorted(r_t, key=lambda x: len(x)))))
-# r_s = '' if not r_s else '({})'.format('|'.join(
-# reversed(sorted(r_s, key=lambda x: len(x)))))
return r_t, r_s
def to_dot(self, name, out='-'):
def test_entry(self, name, title, summary):
print '\n', repr(title), repr(summary)
+ #Get regexes and match
r_t, r_s = self.get_regex(name)
matcht = [re.search(t, title) for t in r_t]
matchs = [re.search(t, summary) for t in r_s]
+ #Remove all the empty matches
matcht = filter(lambda x: x is not None, matcht)
matchs = filter(lambda x: x is not None, matchs)
+ #Title urls
+ print 'urls:'
+ for i, u in enumerate(URL_REG.findall(title), 1):
+ print '{}: {}'.format(i, u)
+ #Title best match
if matcht:
pprint.pprint(
[m.groupdict() for m in
reversed(sorted(matcht, key=lambda x: len(x.groups())))][0])
else:
print 'no title match'
+ #Summary urls
+ print 'urls:'
+ for i, u in enumerate(URL_REG.findall(summary), 1):
+ print '{}: {}'.format(i, u)
+ #Summary best match
if matchs:
pprint.pprint(
[m.groupdict() for m in
for i in feed.entries[:10]:
req.write(('\t\t<tr><td id="cel">{}</td><!--cel--><td id="cel">{}</td>'
'<!--cel--></tr>\n').format(
- i['title'].encode('ascii', 'xmlcharrefreplace'),
- i['summary'].encode('ascii', 'xmlcharrefreplace')))
+ i['title'].encode('ascii', 'xmlcharrefreplace'),
+ i['summary'].encode('ascii', 'xmlcharrefreplace')))
req.write('\t</table>\n<br />')
+++ /dev/null
-digraph dawg {
- node [shape = doublecircle]; 7 24
- node [shape = circle]; 0 1 2 3 4 5 6 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
- 0 -> 1 [label = "\ 1"];
- 1 -> 2 [label = " "];
- 2 -> 3 [label = "\ 2"];
- 3 -> 4 [label = " "];
- 4 -> 5 [label = "-"];
- 5 -> 6 [label = " "];
- 6 -> 7 [label = "\ 3"];
- 7 -> 8 [label = " "];
- 8 -> 9 [label = " "];
- 9 -> 10 [label = " "];
- 10 -> 11 [label = "-"];
- 11 -> 12 [label = " "];
- 12 -> 13 [label = " "];
- 13 -> 14 [label = " "];
- 14 -> 15 [label = "L"];
- 15 -> 16 [label = "o"];
- 16 -> 17 [label = "c"];
- 17 -> 18 [label = "a"];
- 18 -> 19 [label = "t"];
- 19 -> 20 [label = "i"];
- 20 -> 21 [label = "e"];
- 21 -> 22 [label = ":"];
- 22 -> 23 [label = " "];
- 23 -> 24 [label = "\ 4"];
-}
-urls eruit plukken
meer containers
minimale eisen rss feed
benadrukken waarom rss
\section{Software architecture}
The program can be divided into three components: input, data processing and
-the crawler. The applications have separate tasks within the workflow, the
-input application defines together with the NIP the patterns for the source,
-the data processing application processes the patterns it is given by the input
-application and compiles them into computer interpretable patterns and the
-crawler interprets the patterns and visits the sources from time to time to
-extract the information.
+the crawler. The applications are strictly separated and perform completely
+different tasks. The overall workflow is divided in two subtasks, namely
+training and crawling.
+
\begin{figure}[H]
\centering
\caption{Workflow of the application}
- \begin{sequencediagram}
- \newthread{u}{:User}
- \newinst{i}{:Input}
- \newinst{p}{:Data processing}
- \newinst{s}{:Source}
- \newthread{c}{:Crawler}
- \newinst{d}{:Database}
-
- \begin{sdblock}{Training}{}
- \begin{messcall}
- {u}{initiate}{i}
+ \scalebox{0.9}{
+ \begin{sequencediagram}
+ \newinst{d}{:Database}
+ \newinst{i}{:Input}
+ \newinst{p}{:Data processing}
+ \newinst{s}{:Source}
+ \newthread{c}{:Crawler}
+ \newthread{u}{:User}
+
+ \begin{sdblock}{Training}{}
+ \begin{messcall}
+ {u}{initiate}{i}
+ \begin{call}
+ {i}{fetch source}
+ {s}{source data}
+ \end{call}
+ \begin{call}
+ {i}{ask for markings}
+ {u}{marked data}
+ \end{call}
+ \begin{messcall}
+ {i}{marked data}{p}
+ \begin{messcall}
+ {p}{processed crawler pattern}{c}
+ \end{messcall}
+ \end{messcall}
+ \end{messcall}
+ \end{sdblock}
+
+ \begin{sdblock}{Crawl}{}
\begin{call}
- {i}{fetch source}
+ {c}{visit source}
{s}{source data}
\end{call}
- \begin{call}
- {i}{ask for markings}
- {u}{marked data}
- \end{call}
\begin{messcall}
- {i}{marked data}{p}
- \begin{messcall}
- {p}{processed crawler pattern}{c}
- \end{messcall}
+ {c}{processed data}{d}
\end{messcall}
- \end{messcall}
- \end{sdblock}
-
- \begin{sdblock}{Crawl}{Correct}
- \begin{call}
- {c}{visit source}
- {s}{source data}
- \end{call}
- \begin{messcall}
- {c}{processed data}{d}
- \end{messcall}
- \end{sdblock}
- \end{sequencediagram}
+ \end{sdblock}
+ \end{sequencediagram}
+ }
+\end{figure}
+\newpage
+
+\section{Training}
+Input consists of two phases, namely the input and the processing stage. These
+phases flow into eachother without the knowing of the user so that the task of
+training a crawler stays as simple as possible. The data coming from the
+trainings phase is sent to the crawl application.
+
+\subsection{Input phase}
+The purpose of the input application is to define the patterns together with
+the user so that the information can be transferred to the data processing
+application.
+The user input all goes through the familiar interface of the user's preferred
+web browser. By visiting the crawler's train website the user can specify the
+metadata of the source it wants to be periodically crawled through simple web
+forms as seen in figure~\ref{fig:mf1}
+\begin{figure}[H]
+ \centering
+ \caption{Webforms for source metadata}
+ \label{fig:mf1}
+ \includegraphics[width=80mm]{./img/img1.png}
+\end{figure}
+The input application creates together with the user a pattern
+that matches the structure of the RSS data. The data processing application
+converts the patterns into a directed acyclic graph(DAG) so that it becomes
+machine readable.
+
+\subsection{Processing phase}
+The data processing application is the application that takes the input from
+the input application and converts it to crawler rules. This application is
+triggered after a user is done with the input application, the data processing
+application creates crawler patterns so that the crawler can periodically and
+systematically extract the information from the sources.
+
+%\subsection{Directed acyclic graphs and finite state automata}
+Directed acyclic graphs(DAG) and finite state automata(FSA) have a lot in
+common concerning pattern recognition and information extraction. By feeding
+words\footnote{A word is a finite combination of letters from the graphs
+alphabet, thus a word is not limited to linguistic words but can be anything
+as long as the components are in the graphs alphabet} into an algorithm a DAG
+can be generated so that it matches certain patters present in the given words.
+Figure~\ref{fig:mg1} for example shows a FSA that matches on the words
+\textit{ab} and \textit{ac}.
+\begin{figure}[H]
+ \centering
+ \caption{Example DAG/FSA}
+ \label{fig:mg1}
+ \includegraphics[width=15mm]{./dots/graph1.png}
+\end{figure}
+
+With this FSA we can test if a word fits to the constraints it the FSA
+describes. And with a little adaptation we can extract dynamic information from
+semi-structured data.\\
+
+%\subsection{Back to DAG's and FSA's}
+Nodes in this data structure can be single letters but also bigger
+constructions. The example in Figure~\ref{fig:mg2} describes different
+separator pattern for event data with its three component: what, when, where.
+In this example the nodes with the labels \textit{what, when, where} can also
+be complete subgrahps. In this way data on a larger level can be using the
+NIP markings and data within the categories can be processed autonomously.
+\begin{figure}[H]
+ \centering
+ \caption{Example event data}
+ \label{fig:mg2}
+ \includegraphics[width=\linewidth]{./dots/graph2.png}
\end{figure}
-\input{methods_input.tex}
+\section{Crawling}
+Finally, the crawler periodically retrieves the RSS source
+and feeds it to the DAG and in that way isolate the categories information
+which is put into an XML file to be imported in the general database.
+
-\input{methods_data.tex}
+%\section{Crawler application}
+The crawler application is the program that periodically visits the sources and
+extracts the information conform the given pattern from these sources. When the
+crawler is trying to extract information from a website and when this fails it
+will send a message to a system administrator, to either add the entry to the
+training set or to retrain the entire network again with new data because there
+have been changes in the internal structure of the visited source.
-\input{methods_crawl.tex}
+++ /dev/null
-\section{Crawler application}
-The crawler application is the program that periodically visits the sources and
-extracts the information conform the given pattern from these sources. When the
-crawler is trying to extract information from a website and when this fails it
-will send a message to a system administrator, to either add the entry to the
-training set or to retrain the entire network again with new data because there
-have been changes in the internal structure of the visited source.
+++ /dev/null
-\section{Data processing application}
-The data processing application is the application that takes the input from
-the input application and converts it to crawler rules. This application is
-triggered after a user is done with the input application, the data processing
-application creates crawler patterns so that the crawler can periodically and
-systematically extract the information from the sources.
-
-\subsection{Directed acyclic graphs and finite state automata}
-Directed acyclic graphs(DAG) and finite state automata(FSA) have a lot in
-common concerning pattern recognition and information extraction. By feeding
-words\footnote{A word is a finite combination of letters from the graphs
-alphabet, thus a word is not limited to linguistic words but can be anything
-as long as the components are in the graphs alphabet} into an algorithm a DAG
-can be generated so that it matches certain patters present in the given words.
-Figure~\ref{fig:mg1} for example shows a FSA that matches on the words
-\textit{ab} and \textit{ac}.
-\begin{figure}[H]
- \centering
- \caption{Example DAG/FSA}
- \label{fig:mg1}
- \includegraphics[width=15mm]{./dots/graph1.png}
-\end{figure}
-
-With this FSA we can test if a word fits to the constraints it the FSA
-describes. And with a little adaptation we can extract dynamic information from
-semi-structured data.\\
-
-\subsection{Back to DAG's and FSA's}
-Nodes in this data structure can be single letters but also bigger
-constructions. The example in Figure~\ref{fig:mg2} describes different
-separator pattern for event data with its three component: what, when, where.
-In this example the nodes with the labels \textit{what, when, where} can also
-be complete subgrahps. In this way data on a larger level can be using the
-NIP markings and data within the categories can be processed autonomously.
-\begin{figure}[H]
- \centering
- \caption{Example event data}
- \label{fig:mg2}
- \includegraphics[width=\linewidth]{./dots/graph2.png}
-\end{figure}
+++ /dev/null
-\section{Input application}
-The purpose of the input application is to define the patterns together with
-the user so that the information can be transferred to the data processing
-application.
-The user input all goes through the familiar interface of the user's preferred
-web browser. By visiting the crawler's train website the user can specify the
-metadata of the source it wants to be periodically crawled through simple web
-forms as seen in figure~\ref{fig:mf1}
-\begin{figure}[H]
- \centering
- \caption{Webforms for source metadata}
- \label{fig:mf1}
- \includegraphics[width=80mm]{./img/img1.png}
-\end{figure}
-\documentclass[hidelinks]{scrbook}
+\documentclass[hidelinks,a4]{scrbook}
-\usepackage{lipsum} % Dummy text
-\usepackage{graphicx} % Images
-\usepackage{float} % Better placement float figures
-\usepackage{listings} % Source code formatting
-\usepackage{hyperref} % Hyperlinks
-\usepackage{tikz} % Sequence diagrams
-\usepackage{pgf-umlsd}
-\usepgflibrary{arrows}
+\usepackage{lipsum} % Dummy text
+\usepackage{graphicx} % Images
+\usepackage{float} % Better placement float figures
+\usepackage{listings} % Source code formatting
+\usepackage{hyperref} % Hyperlinks
+\usepackage{tikz} % Sequence diagrams
+\usepackage{pgf-umlsd} %
+\usepgflibrary{arrows} %
% Set listings settings
\lstset{