Golden Agents / SAA:Transport Acts revisited
Giving shape to seemingly structured data
CREATE Salon, 11 April 2019Leon van Wissen ([email protected])
1
Amsterdam City Archive: Transport Acts
Data from 1563 - 1811, contains transfers of real estate:
● Houses (parts of), warehouses● Ships, mills, manufactories● Courtyards
Indicated by:
● Name of the house (NB: portable, not indicative of location!) ● A street● A relative location Download ‘Index op de Kwijtscheldingen’:
https://www.amsterdam.nl/stadsarchief/organisatie/open-data/
2
Transport Acts: Statistics
163.808 records
1.603 unique streets
87.339 unique descriptions
425.461 persons
3.329 Jan Jansz’s
<indexRecord id="saaId21631398">
<Datum_overdracht>1675-11-25</Datum_overdracht>
<Verkoper>Hoost wed. Jan Jacobs Jongeboer, Erven
Lijsbet</Verkoper>
<Koper>Hoost, Geertie Claas</Koper>
<Straatnaam>Rembrandtsplein</Straatnaam>
<Straatnaam_in_bron>Reguliersmarkt</Straatnaam_in_bron>
<Omschrijving>De Zwarte Koe in de gevel, huis en
erf</Omschrijving>
<urlScan>https://archief.amsterdam/inventarissen/inventa
ris/5062.nl.html#A09161000004.JPG</urlScan>
</indexRecord>
3
Exampleid: saaId21705054Date: 1782-11-20Sellers: Erven Jacob Luurman echtgenoot Anna KoopmanBuyers: Joannes Bernardus Siesouw echtgenoot Maria LuermanStreet: Lindengracht (NWZ)Description: De Kat in de Wijngaard boven de deur, 1/2 huis en erf, westhoek Tweede GoudsbloemdwarsstraatScans: A11651000329.JPG, A11651000330.JPG
4
Elements to parse and clean
The Seller / Buyer field:
● First name, surname, prefixes, suffixes● Spouse, widow, second spouse / widow● Other
The description field:
● House names and location of the name (e.g. uithangend)● Part of real estate (e.g. 1/336 huis)● Type of property (e.g. Suikerbakkerij)● Geolocation (+ providing a geometry)
5
Sellers: Erven Jacob Luurman echtgenoot Anna Koopman
Buyers: Joannes Bernardus Siesouw echtgenoot Maria Luerman
Description: De Kat in de Wijngaard boven de deur, 1/2 huis en erf,
westhoek Tweede Goudsbloemdwarsstraat
Step 1: Person names and relations
6
● Juffer of Akersloot, Erven Cornelis Pietersz● Kien wednr. Beatrix Potgieter wed. Dirk
Vroonhof, Elias● Boes medic. doctor echtgenoot Maria Anna van
Wijkersloot, Cornelis● Deel boedelhoudster Margareta van Hoffen,
Erven Dirk● Oortman, Insolvente boedel Frans Hendrik● Sismus med. dr. echtgenoot Agatha Doublet,
Joannes● Stier douairière graaf de Baillet, Catharina
Clasina Maria● Seruijs wed. Nicolaes Marrevelt, Hester● Voocht oud-burgemeester van Haarlem, Willem
Claesz● Cornelisz binnenlandsvaarder Annitge Pieters,
Cors
Example person names
● Prado alias Juda de Prado Vega, Erven Jacob [de]
● Posthol de l' Arche, Erven Ignatius● Kien wednr. Beatrix Potgieter Schepers wednr.
Dirk Vroonhof, Elias● Eldert wednr. Trijntje Dirks Schepers wednr.
Dirk Arno, Pieter [van]● Eldert of Pieter van den Ende wednr. Trijntje
Dirks Schepers wednr. Maria Arnouds, Pieter [van]
● Meijer wednr Christina Jansz Handel, Nicolaas● Clattenburg dechtgenoot Catharina Onse, Erven
Dirk● Boijesse of Boeijsen bierdrager echtgenoot
Willemtje Alberts, Erven Pieter● Friese of Fresseresie, Jan Izaac
7
Identifying word groups
● Last name (+ last name variant)● Function● Relation● Related person● Prefix related person● Relation two● Related person two● Prefix related person two● Heir● First name (+ first name variant)● Surname prefix
● Prado alias Juda de Prado Vega, Erven Jacob [de]
● Posthol de l' Arche, Erven Ignatius● Kien wednr. Beatrix Potgieter Schepers wednr.
Dirk Vroonhof, Elias● Eldert wednr. Trijntje Dirks Schepers wednr.
Dirk Arno, Pieter [van]● Eldert of Pieter van den Ende wednr. Trijntje
Dirks Schepers wednr. Maria Arnouds, Pieter [van]
● Meijer wednr Christina Jansz Handel, Nicolaas● Clattenburg dechtgenoot Catharina Onse, Erven
Dirk● Boijesse of Boeijsen bierdrager echtgenoot
Willemtje Alberts, Erven Pieter● Friese of Fresseresie, Jan Izaac
8
Using a regular expression to parse the text
Regex
Advanced wildcards (e.g. using * when searching)
Powerful toolset if no ‘training data’ is available
Some structure should be present in the data
● Capitalised names● Consistent word positions
Difficult to read and not fail-safe: nearly impossible to capture all exceptions
9
Example:
Simple: Vries, Jan [de]
● ([A-Z]\w*), ([A-Z]\w*) (\[\w*\])?
Complex: Eldert of van den Ende wednr. Trijntje Dirks Schepers wednr. Maria Arnouds, Pieter [van]
● (?P<lastname>(?:(?:[A-Z][\w\.]*)[ ]?)*(?:(?:(?:(?:van)|(?:de)|(?:de[ ]oude)|(?:der)|(?:van[ ]de.?)|(?:en)|(?:d')|(?:de[ ]l')|(?:da))[ ](?:(?:[A-Z][\w\.]+)[ ]?)*))?)?(?:(?:(?:(?:of)|(?:alias))[ ])(?P<lastname_variant>(?:(?:(?:van[ ])|(?:de[ ])|(?:van[ ]de.?[ ]))?(?:[A-Z][\w]+)[ ]?)*))?
10
To impress, some excerpt:
11
Some problems
Typo’s, strange characters mess up the result
What to expect?
When to stop?
Not a silver bullet, post-processing is necessary:
● Person two and three● Functions / relations
13
Step 2: Descriptions and geolocations
14
Identifying word groups
● House name○ With location○ Without location
● Legal fraction● Type● Location
● De Drie Bonte Kraaien, 1/4 pakhuis en erf● De Gooier, 1/4 huis en 2 huisjes, huis en beoosten het pad van
de molen en twee huisjes ● Schoenmakerij en erf● 1/4 in 5 huizen, bij de Tweede Looiersdwarsstraat (Laatste
Looiersdwarsstraat)● 1/2 huis en erf, bij de Anjeliersstraat voorbij de laatste
dwarsstraat● Huis en erf zijnde een broodbakkerswinkel, het derde huis van
het Rembrandtsplein (Botermarkt)● Huis en erf, het tweede huis van de Weesperstraat● Huis en erf, het negende huis van de Nieuwe Spiegelstraat
tussen Vijzelstraat en Nieuwe Spiegelstraat● Januari, pakhuis en erf, tussen Amstel en Frederiksplein
(Varkenmarkt)● Abrahams Offerande in de gevel, huis en erf, tussen Lange
Houtstraat (Vlooienburgerstraat) en Zwanenburgerstraat
15
Narrowing down the location
Using:
● Street / Original Street + modifier● Year● The georeference from the previous step
And some hacked Named Entity Recognition and Phrase Matching:
● LOCATION: Adamlink building and street labels and altLabels (17.630 spelling varieties)
● RELATIVE LOCATION: ‘Eerste dwarsstraat’, ‘Tweede brug’● MODIFIER: ‘bij’, ‘naast’, ‘tussen’, ‘bezuiden’, ‘noordhoek’
EgelantiersstraatHuis en erf, bij de laatste dwarsstraat
→ Derde Egelantiersdwarsstraat
17
Mapping georeferences
Transition based parsing
Example: Keizersgracht (WZ), tussen Runstraat en Berenstraat
https://adamlink.nl/geo/street/runstraat/3912https://adamlink.nl/geo/street/keizersgracht/2337 https://adamlink.nl/geo/street/berenstraat/394 18
Geometry
De Drie SpieghelsKeizersgracht, tussen Runstraat en Berenstraat
MULTIPOLYGON (((4.88426698204437 52.3688668168224, 4.883766565347695 52.36888701299711, 4.883766565347697 52.36888701299713, 4.883768866803108 52.36891049171032, 4.883881872342098 52.37038545965837, 4.883881872342148 52.37038545965902, 4.884375841607252 52.37036847182889, 4.884382 52.370368, 4.884267 52.368867, 4.88426698204437 52.3688668168224)), ((4.8843774612369 52.37036841612908, 4.884382023766308 52.37036825922159, 4.884382023766306 52.37036825922156, 4.884382 52.370368, 4.8843774612369 52.37036841612908)))
19
HaarlemKeizersgracht (WZ), bezuiden de Westermarkt
MULTIPOLYGON (((4.883693088931786 52.36719365739449, 4.883679666382219 52.36723989826782, 4.88367075386341 52.36728721581436, 4.883655753863411 52.36739521581436, 4.883651062976258 52.36745606449168, 4.883648062976258 52.36764506449168, 4.883650384957044 52.36770177775132, 4.883768866803108 52.36891049171032, 4.883883461058028 52.37040619585498, 4.884382 52.370368, 4.884267 52.368867, 4.884150773133721 52.36768129062469, … … … ]
Geometry
20
Geometry
Het Groene KussenNes, tussen Pieter Jacobszstraat en Sint Pieterspoortsteeg (Hal)
POLYGON ((4.894116757778897 52.37144710689249, 4.8936219659837 52.371534057935, 4.8937185833703 52.371881530075, 4.8937626338591 52.371881713659, 4.89421112323113 52.37178722181261, 4.894200969426226 52.3717499865725, 4.89420058242565 52.37174880014599, 4.894200307505457 52.37174758285552, 4.894116757778897 52.37144710689249))
21
Geometry
De Kat in de WijngaertLindengracht (NWZ), westhoek Tweede Goudsbloemdwarsstraat
POLYGON ((4.884248428951326 52.38023277051681, 4.88422944809281 52.38022987392942, 4.8842294478 52.3802298739, 4.88404455278401 52.38020207331837, 4.883965250977025 52.38039239765514, 4.88416914386645 52.38042305472052, 4.884248428951326 52.38023277051681))
22
Lindengracht 160, 1015 KL Amsterdam
23
Converted into RDF
Connecting to other SSA indices
Connecting other datasets (e.g. Ecartico)
Just a sketch
24
Example RDF
saaRec:saaId21729482 a saaOnt:IndexOpKwijtscheldingen ;saaOnt:date_transaction "1810-12-19"^^xsd:date ;saaOnt:urlScan
<https://archief.amsterdam/inventarissen/inventaris/5062.nl.html#A09302000251.JPG> ;
saaOnt:mentionsSeller [saaOnt:represents saaPerson:saaId21729482p1 ;
rdfs:label "heirs Hermanus Mulder" ;saaOnt:representationType "heirs" ] ;
saaOnt:mentionsBuyer saaPerson:saaId21729482p2 ;saaOnt:mentionsStreet saaLocation:saaId21729482l1 ;saaOnt:mentionsProperty saaProperty:saaId21729482pr1 ;saaOnt:description "Huis en erf, tussen Westerstraat
(Anjeliersgracht) en Karthuizersstraat" .
saaPerson:saaId21729482p1 a saaOnt:Person ;saaOnt:family_name "Mulder" ;saaOnt:first_name "Hermanus" ;saaOnt:full_name "Hermanus Mulder" ;rdfs:label "Hermanus Mulder" ;saaOnt:literalName "Mulder wednr. Catharina Lickmans, Erven
Hermanus" ;saaOnt:relation [saaOnt:relationType "widow" ;
rdfs:label "widow" ;saaOnt:relatedTo saaPerson:saaId21729482p1a ] ;
saaOnt:isInRecord saaRec:saaId21729482 .
25
saaPerson:saaId21729482p1a a saaOnt:Person ;saaOnt:family_name "Lickmans" ;saaOnt:first_name "Catharina" ;saaOnt:full_name "Catharina Lickmans" ;rdfs:label "Catharina Lickmans" ;saaOnt:isInRecord saaRec:saaId21729482 .
saaPerson:saaId21729482p2 a saaOnt:Person ;saaOnt:family_name "Hak" ;saaOnt:first_name "Jan" ;saaOnt:full_name "Jan Hak" ;rdfs:label "Jan Hak" ;saaOnt:literalName "Hak, Jan" ;saaOnt:isInRecord saaRec:saaId21729482 .
saaLocation:saaId21729482l1 a saaOnt:Location ;saaOnt:street_name_source "Tweede Boomdwarsstraat" ;rdfs:label "Tweede Boomdwarsstraat" ;saaOnt:street_name "Tweede Boomdwarsstraat" ;saaOnt:isInRecord saaRec:saaId21729482 .
saaProperty:saaId21729482pr1 a saaOnt:Property ;saaOnt:propertyType "Huis en erf" ;saaOnt:geoReference saaGeoRef:saaId21729482geo1 ;saaOnt:isInRecord saaRec:saaId21729482 .
saaGeoRef:saaId21729482geo1 a saaOnt:GeoReference ;saaOnt:geoDescription "tussen Westerstraat (Anjeliersgracht) en
Karthuizersstraat" ;rdfs:label "tussen Westerstraat (Anjeliersgracht) en
Karthuizersstraat" ;geo:hasGeometry [ geo:asWKT "POLYGON ((4.882765078315236 52.37824843621823,
4.882742012219367 52.37828913709216, 4.882570134600987 52.37862851666272, 4.882484657796708 52.37875077685889, 4.88243241093789 52.378846143955, 4.882389959957689 52.37894876451, 4.882385859129953 52.37895899564059, 4.882377130695321 52.37898148691396, 4.8828944395493 52.379037271039, 4.8830001989675 52.378885999974, 4.8832976491186 52.378327242276, 4.883297649081596 52.37832724226915, 4.882776233924738 52.37823073691044, 4.882765078315236 52.37824843621823))" ;
sem:hasTime "1810"^^xsd:gYear] .
Published in druid (CLARIAH)
Please note that the used ontology/vocabulary is far from final. Tomorrow, everything could be different!
PREFIX saaOnt: <http://goldenagents.org/uva/SAA/ontology/>PREFIX geo: <http://www.opengis.net/ont/geosparql#>PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>SELECT * WHERE { ?record saaOnt:mentionsProperty ?property ; saaOnt:mentionsStreet/saaOnt:street_name_source ?street . ?property saaOnt:geoReference ?propertygeoref ; rdfs:label ?wktLabel . ?propertygeoref geo:hasGeometry/geo:asWKT ?wkt ; saaOnt:geoDescription ?description . BIND (CONCAT(?street, ', ', ?description) AS ?wktTooltip) } OFFSET 1000 LIMIT 100
Datasets: https://druid.datalegend.net/lvanwissen/Stadsarchief/
Example query (druid):
26