Citation Management with Zotero


In [1]:
from IPython.display import HTML
HTML('<iframe src=http://zotero.org/ width=700 height=350></iframe>')


Out[1]:

or: Never format your own bibliography again!

First, the useful things we will do today:

  • Make a Zotero account (if you don't already have one)
  • Install Zotero software from https://www.zotero.org/download/
    • For Firefox, you want Zotero 4.0 for Firefox and also the plugin for Word / OpenOffice.
    • For Safari or Chrome, you want the standalone client and the appropriate web connector.
  • Add things to your Zotero library with the push of a button!
  • Make a document, add references and citations without formatting a thing yourself.

And then, the fun things!

  • Use Python to 'read' a Zotero library
  • Pull the results into Graphviz and graph them!

This notebook includes the Python part of today's lesson.

Using Python to query Zotero

The first thing you need is the Zotero Python library. From a terminal command prompt, run

pip install pyzotero

and then you're good to go.


In [2]:
from pyzotero import zotero

Let's use Python to look through someone's Zotero library! For this example I am using the public Zotero group library "Digital Humanities". You can also do this with your own private libraries, or closed group libraries if you're a member. To use the Python interface at all, you will need to generate an API key at https://www.zotero.org/settings/keys .

The Pyzotero API has some documentation here: http://pyzotero.readthedocs.org/en/latest/ although, like most technical documentation, it takes some getting used to.


In [3]:
zotero_group = zotero.Zotero( 30, "group", '9GLmvmZ1K1qGAz9QWcdlyf6L' )
things_in_library = zotero_group.items()
# See how many things we got back
print("We retrieved %d items" % len( things_in_library ))
# Look at one of the things
print(things_in_library[1])


We retrieved 25 items
{'version': 4486, 'data': {'extra': '00205 \nCited by 0000', 'language': '', 'collections': ['QTKPK7GB'], 'abstractNote': '', 'volume': '', 'numberOfVolumes': '', 'numPages': '728', 'publisher': 'Random House, Inc.', 'archiveLocation': '', 'tags': [], 'shortTitle': '', 'relations': {}, 'place': '', 'dateAdded': '2011-01-24T22:35:50Z', 'dateModified': '2015-04-08T01:34:12Z', 'libraryCatalog': 'Google Books', 'itemType': 'book', 'archive': '', 'callNumber': '0000', 'ISBN': '9780375420528', 'creators': [{'firstName': 'Mark Z.', 'lastName': 'Danielewski', 'creatorType': 'author'}], 'rights': '', 'series': '', 'version': 4486, 'accessDate': '', 'title': "Mark Z. Danielewski's House of leaves", 'seriesNumber': '', 'edition': '', 'url': '', 'date': '2000', 'key': '6KVEB6IP'}, 'library': {'id': 30, 'type': 'group', 'name': 'Digital Humanities', 'links': {'alternate': {'type': 'text/html', 'href': 'https://www.zotero.org/groups/digital_humanities'}}}, 'key': '6KVEB6IP', 'meta': {'creatorSummary': 'Danielewski', 'numChildren': 1, 'parsedDate': '2000', 'lastModifiedByUser': {'id': 493397, 'name': 'John Muccigrosso', 'username': 'John_muccigrosso', 'links': {'alternate': {'type': 'text/html', 'href': 'https://www.zotero.org/john_muccigrosso'}}}, 'createdByUser': {'id': 130917, 'name': 'Jeff Allred', 'username': 'jallred', 'links': {'alternate': {'type': 'text/html', 'href': 'https://www.zotero.org/jallred'}}}}, 'links': {'alternate': {'type': 'text/html', 'href': 'https://www.zotero.org/groups/digital_humanities/items/6KVEB6IP'}, 'self': {'type': 'application/json', 'href': 'https://api.zotero.org/groups/30/items/6KVEB6IP'}}}

So we have 25 things in our list, and we can see that each of these 'things' is a JSON structure. That's fine, since we have learned about JSON.

Back to that total number: we got 25 things by asking for the group's items. Does that mean there are 25 things in the library?


In [4]:
print("This group library has %d items in it" % zotero_group.num_items())


This group library has 541 items in it

Hmm. So how come we only got 25?

In order to protect itself against obnoxiously huge requests, the Zotero server limits the amount of information it will give out in response to any one request. You can ask for as many as 100 at a time by saying zotero_group.items( limit=100 ), but if you want more than that you have to keep making new requests until you get them all. The default built into pyzotero is to ask for 25 items at a time.

The way pyzotero handles larger libraries is a little intricate. One way to keep making new requests is to use the .follow() method - you can use this whenever you have just used a method that returns a list of items. follow() says "Okay, now give me the next chunk... and the next... and then next."

But as we're about to see, we have to figure out how to know when to stop.


In [5]:
our_items = zotero_group.items( limit=100 ); 
for i in range(1):   # Run the 'extend' method once
    our_items.extend( zotero_group.follow() )
    
print("We have %d items so far" % len( our_items ))


We have 200 items so far

In [6]:
our_items = zotero_group.items( limit=100 ); 
for i in range(2):   # Run the 'extend' method twice
    our_items.extend( zotero_group.follow() )
    
print("We have %d items so far" % len( our_items ))


We have 300 items so far

In [7]:
our_items = zotero_group.items( limit=100 ); 
for i in range(3):   # Run the 'extend' method three times
    our_items.extend( zotero_group.follow() )
    
print("We have %d items so far" % len( our_items ))


We have 400 items so far

In [8]:
our_items = zotero_group.items( limit=100 ); 
for i in range(4):   # Run the 'extend' method four times
    our_items.extend( zotero_group.follow() )
    
print("We have %d items so far" % len( our_items ))


We have 500 items so far

In [9]:
our_items = zotero_group.items( limit=100 ); 
for i in range(5):   # Run the 'extend' method five times
    our_items.extend( zotero_group.follow() )
    
print("We have %d items so far" % len( our_items ))


We have 600 items so far

Well that's interesting - we saw before that the number of items in this library is supposedly 541, and now we have 600!

That means that our first natural instinct for how to solve this problem - to divide num_items by 100 and figure out that way how many times we should iterate - won't work. What now? Where does this library end?


In [10]:
our_items = zotero_group.items( limit=100 ); 
for i in range(6):   # Run the 'extend' method six times
    our_items.extend( zotero_group.follow() )
    
print("We have %d items so far" % len( our_items ))


We have 698 items so far

Okay - 698 is not a multiple of 100, so this is probably the end of the line. What would happen if we just tested, to see if there is any more?


In [11]:
our_items = zotero_group.items( limit=100 ); 
for i in range(7):   # Run the 'extend' method seven times
    our_items.extend( zotero_group.follow() )
    
print("We have %d items so far" % len( our_items ))


---------------------------------------------------------------------------
gaierror                                  Traceback (most recent call last)
/opt/local/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/requests/packages/urllib3/connectionpool.py in urlopen(self, method, url, body, headers, retries, redirect, assert_same_host, timeout, pool_timeout, release_conn, **response_kw)
    543                                                   timeout=timeout_obj,
--> 544                                                   body=body, headers=headers)
    545 

/opt/local/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/requests/packages/urllib3/connectionpool.py in _make_request(self, conn, method, url, timeout, **httplib_request_kw)
    340         try:
--> 341             self._validate_conn(conn)
    342         except (SocketTimeout, BaseSSLError) as e:

/opt/local/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/requests/packages/urllib3/connectionpool.py in _validate_conn(self, conn)
    761         if not getattr(conn, 'sock', None):  # AppEngine might not have  `.sock`
--> 762             conn.connect()
    763 

/opt/local/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/requests/packages/urllib3/connection.py in connect(self)
    203         # Add certificate verification
--> 204         conn = self._new_conn()
    205 

/opt/local/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/requests/packages/urllib3/connection.py in _new_conn(self)
    133             conn = connection.create_connection(
--> 134                 (self.host, self.port), self.timeout, **extra_kw)
    135 

/opt/local/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/requests/packages/urllib3/util/connection.py in create_connection(address, timeout, source_address, socket_options)
     63     err = None
---> 64     for res in socket.getaddrinfo(host, port, 0, socket.SOCK_STREAM):
     65         af, socktype, proto, canonname, sa = res

/opt/local/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/socket.py in getaddrinfo(host, port, family, type, proto, flags)
    532     addrlist = []
--> 533     for res in _socket.getaddrinfo(host, port, family, type, proto, flags):
    534         af, socktype, proto, canonname, sa = res

gaierror: [Errno 8] nodename nor servname provided, or not known

During handling of the above exception, another exception occurred:

ProtocolError                             Traceback (most recent call last)
/opt/local/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/requests/adapters.py in send(self, request, stream, timeout, verify, cert, proxies)
    369                     retries=self.max_retries,
--> 370                     timeout=timeout
    371                 )

/opt/local/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/requests/packages/urllib3/connectionpool.py in urlopen(self, method, url, body, headers, retries, redirect, assert_same_host, timeout, pool_timeout, release_conn, **response_kw)
    596             retries = retries.increment(method, url, error=e, _pool=self,
--> 597                                         _stacktrace=sys.exc_info()[2])
    598             retries.sleep()

/opt/local/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/requests/packages/urllib3/util/retry.py in increment(self, method, url, response, error, _pool, _stacktrace)
    244             if read is False:
--> 245                 raise six.reraise(type(error), error, _stacktrace)
    246             elif read is not None:

/opt/local/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/requests/packages/urllib3/packages/six.py in reraise(tp, value, tb)
    308         if value.__traceback__ is not tb:
--> 309             raise value.with_traceback(tb)
    310         raise value

/opt/local/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/requests/packages/urllib3/connectionpool.py in urlopen(self, method, url, body, headers, retries, redirect, assert_same_host, timeout, pool_timeout, release_conn, **response_kw)
    543                                                   timeout=timeout_obj,
--> 544                                                   body=body, headers=headers)
    545 

/opt/local/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/requests/packages/urllib3/connectionpool.py in _make_request(self, conn, method, url, timeout, **httplib_request_kw)
    340         try:
--> 341             self._validate_conn(conn)
    342         except (SocketTimeout, BaseSSLError) as e:

/opt/local/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/requests/packages/urllib3/connectionpool.py in _validate_conn(self, conn)
    761         if not getattr(conn, 'sock', None):  # AppEngine might not have  `.sock`
--> 762             conn.connect()
    763 

/opt/local/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/requests/packages/urllib3/connection.py in connect(self)
    203         # Add certificate verification
--> 204         conn = self._new_conn()
    205 

/opt/local/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/requests/packages/urllib3/connection.py in _new_conn(self)
    133             conn = connection.create_connection(
--> 134                 (self.host, self.port), self.timeout, **extra_kw)
    135 

/opt/local/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/requests/packages/urllib3/util/connection.py in create_connection(address, timeout, source_address, socket_options)
     63     err = None
---> 64     for res in socket.getaddrinfo(host, port, 0, socket.SOCK_STREAM):
     65         af, socktype, proto, canonname, sa = res

/opt/local/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/socket.py in getaddrinfo(host, port, family, type, proto, flags)
    532     addrlist = []
--> 533     for res in _socket.getaddrinfo(host, port, family, type, proto, flags):
    534         af, socktype, proto, canonname, sa = res

ProtocolError: ('Connection aborted.', gaierror(8, 'nodename nor servname provided, or not known'))

During handling of the above exception, another exception occurred:

ConnectionError                           Traceback (most recent call last)
<ipython-input-11-dfae4aba8b86> in <module>()
      1 our_items = zotero_group.items( limit=100 );
      2 for i in range(7):   # Run the 'extend' method seven times
----> 3     our_items.extend( zotero_group.follow() )
      4 
      5 print("We have %d items so far" % len( our_items ))

/opt/local/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/pyzotero/zotero.py in wrapped_f(self, *args, **kwargs)
    118         if kwargs:
    119             self.add_parameters(**kwargs)
--> 120         retrieved = self._retrieve_data(func(self, *args))
    121         # we now always have links in the header response
    122         self.links = self._extract_links()

/opt/local/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/pyzotero/zotero.py in _retrieve_data(self, request)
    254         self.request = requests.get(
    255             url=full_url,
--> 256             headers=self.default_headers())
    257         try:
    258             self.request.raise_for_status()

/opt/local/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/requests/api.py in get(url, **kwargs)
     66 
     67     kwargs.setdefault('allow_redirects', True)
---> 68     return request('get', url, **kwargs)
     69 
     70 

/opt/local/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/requests/api.py in request(method, url, **kwargs)
     48 
     49     session = sessions.Session()
---> 50     response = session.request(method=method, url=url, **kwargs)
     51     # By explicitly closing the session, we avoid leaving sockets open which
     52     # can trigger a ResourceWarning in some cases, and look like a memory leak

/opt/local/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/requests/sessions.py in request(self, method, url, params, data, headers, cookies, files, auth, timeout, allow_redirects, proxies, hooks, stream, verify, cert, json)
    462         }
    463         send_kwargs.update(settings)
--> 464         resp = self.send(prep, **send_kwargs)
    465 
    466         return resp

/opt/local/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/requests/sessions.py in send(self, request, **kwargs)
    574 
    575         # Send the request
--> 576         r = adapter.send(request, **kwargs)
    577 
    578         # Total elapsed time of the request (approximately)

/opt/local/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/requests/adapters.py in send(self, request, stream, timeout, verify, cert, proxies)
    413 
    414         except (ProtocolError, socket.error) as err:
--> 415             raise ConnectionError(err, request=request)
    416 
    417         except MaxRetryError as e:

ConnectionError: ('Connection aborted.', gaierror(8, 'nodename nor servname provided, or not known'))

Well! That's a nasty-looking error. And now we have the seemingly impossible situation that we have no way to know we're finished getting items out of Zotero until our code breaks on us.

As it happens, this sort of thing happens in Python all the time. We have to keep going until we get an error.

Crazy, you say? Ugly, you say? NO! Python expects you to try things until they fail, sometimes! I wasn't kidding about getting comfortable with failure. Here's how we do it:


In [12]:
our_items = zotero_group.items( limit=100 ); 
try:            # This says we anticipate that an error might crop up.
    while (1):  # This says, keep doing the following until something goes wrong.
        our_items.extend( zotero_group.follow() )
except:         # This says, here is what we do if we get an error.
    pass        # This says, "ok thanks Python I was expecting that! Carry on."
    
print("We have %d items in total" % len( our_items ))


We have 698 items in total

This is called "exception handling" and is very useful for when you know (or suspect) something will stop working.

So now we have all our items - let's see who the authors, editors, etc. are! They are stored in the item record as a list of 'creators':


In [13]:
print(our_items[1]['data']['creators'])


[{'firstName': 'Mark Z.', 'lastName': 'Danielewski', 'creatorType': 'author'}]

So we get their names, and we get the info of whether they are authors or editors or translators or what. Let's make a graph and see who publishes about digital humanities!

First, just to make sure we have the hang of this, let's list all the creators we find.


In [14]:
for item in our_items:
    for creator in item['data']['creators']:
        print("%s %s was a(n) %s" % ( creator['firstName'], creator['lastName'], creator['creatorType'] ))


 National Center for Transgender Equality was a(n) author
Mark Z. Danielewski was a(n) author
Alcuin Blamires was a(n) author
Charles E Rosenberg was a(n) author
Simon Egenfeldt-Nielsen was a(n) author
Jonas Heide Smith was a(n) author
Susana Pajares Tosca was a(n) author
Patrik Svensson was a(n) author
Henry Nash Smith was a(n) author
Li Liu was a(n) author
Xingcan Chen was a(n) contributor
Robert Darnton was a(n) author
Claude Chapdelaine was a(n) contributor
---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)
<ipython-input-14-b04cf0550a88> in <module>()
      1 for item in our_items:
      2     for creator in item['data']['creators']:
----> 3         print("%s %s was a(n) %s" % ( creator['firstName'], creator['lastName'], creator['creatorType'] ))

KeyError: 'firstName'

Ooh huh, that's an ugly error. The KeyError means that we found a creator that doesn't have a firstName. We could use a try/except block like we did above, but we could also just check whether each creator has a first name before we try to list them. Let's see what's going on with this first-nameless creators by just printing out the whole structure when we encounter one.


In [15]:
for item in our_items:
    for creator in item['data']['creators']:
        if( 'firstName' in creator ):
            print("%s %s was a(n) %s" % ( creator['firstName'], creator['lastName'], creator['creatorType'] ))
        else:
            print(creator)


 National Center for Transgender Equality was a(n) author
Mark Z. Danielewski was a(n) author
Alcuin Blamires was a(n) author
Charles E Rosenberg was a(n) author
Simon Egenfeldt-Nielsen was a(n) author
Jonas Heide Smith was a(n) author
Susana Pajares Tosca was a(n) author
Patrik Svensson was a(n) author
Henry Nash Smith was a(n) author
Li Liu was a(n) author
Xingcan Chen was a(n) contributor
Robert Darnton was a(n) author
Claude Chapdelaine was a(n) contributor
{'name': 'Association des archéologues du Québec', 'creatorType': 'author'}
British History Online was a(n) author
Serge NOIRET was a(n) author
{'name': 'Amanda Visconti', 'creatorType': 'author'}
Scott Weingart was a(n) author
Trevor Owens was a(n) author
Laura Mandell was a(n) author
Mike Cosgrave was a(n) author
Anna Dowling was a(n) author
Lynn Harding was a(n) author
Róisín O'Brien was a(n) author
Olivia Rohan was a(n) author
Mark Tatz was a(n) author
Daniel J Cohen was a(n) author
Roy Rosenzweig was a(n) author
Luis O Gómez was a(n) author
{'name': 'Śāntarakṣita', 'creatorType': 'author'}
Trevor Owens was a(n) author
Constantin Regamey was a(n) author
Mark Sample was a(n) author
Karin Dalziel was a(n) author
Patrick Murray-John was a(n) author
Andrew Prescott was a(n) author
C. M Sperberg-McQueen was a(n) author
Lou Burnard was a(n) author
Syd Bauman was a(n) author
David Scott was a(n) author
Sheila Brennan was a(n) author
Alan Galey was a(n) author
Lauran A. Kerr-Heraly was a(n) author
Syd Bauman was a(n) author
Lou Burnard was a(n) author
Dan Cohen was a(n) author
Dan Cohen was a(n) author
Todd L. Savitt was a(n) author
Adam Crymble was a(n) author
Tom Scheinfeldt was a(n) author
Amanda Visconti was a(n) author
Tito Orlandi was a(n) author
Amanda Visconti was a(n) author
Kathleen Fitzpatrick was a(n) author
Andrew Skilton was a(n) author
Kate Theimer was a(n) author
Catrice Barrett was a(n) author
Mike Cosgrave was a(n) contributor
Tom Scheinfeldt was a(n) author
 @foundhistory was a(n) author
Constantin Regamey was a(n) author
C. M Sperberg-McQueen was a(n) author
Lou Burnard was a(n) author
{'name': 'Amanda Visconti', 'creatorType': 'author'}
Geoffrey Chaucer was a(n) author
Larry Benson was a(n) editor
Robert Pratt was a(n) seriesEditor
F. N. Robinson was a(n) seriesEditor
Bryan Sinclair was a(n) author
Miriam Posner was a(n) author
Christoph Cüppers was a(n) author
Lee Sheridan Cox was a(n) author
Paja Faudree was a(n) author
John Frederick Bell was a(n) author
---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)
<ipython-input-15-94d3e434fc16> in <module>()
      1 for item in our_items:
----> 2     for creator in item['data']['creators']:
      3         if( 'firstName' in creator ):
      4             print("%s %s was a(n) %s" % ( creator['firstName'], creator['lastName'], creator['creatorType'] ))
      5         else:

KeyError: 'creators'

Well we can see what's happening - some of the creators only have a name. We can cope with that.

But look, we ran into, another key error! There is a record without any creators. So we have to handle that too. For now, let's just skip a record that has no creator.


In [16]:
for item in our_items:
    if( 'creators' not in item['data'] ):
       continue
    for creator in item['data']['creators']:
        if( 'firstName' in creator ):
            print("%s %s was a(n) %s" % ( creator['firstName'], creator['lastName'], creator['creatorType'] ))
        else:
            print(creator)


 National Center for Transgender Equality was a(n) author
Mark Z. Danielewski was a(n) author
Alcuin Blamires was a(n) author
Charles E Rosenberg was a(n) author
Simon Egenfeldt-Nielsen was a(n) author
Jonas Heide Smith was a(n) author
Susana Pajares Tosca was a(n) author
Patrik Svensson was a(n) author
Henry Nash Smith was a(n) author
Li Liu was a(n) author
Xingcan Chen was a(n) contributor
Robert Darnton was a(n) author
Claude Chapdelaine was a(n) contributor
{'name': 'Association des archéologues du Québec', 'creatorType': 'author'}
British History Online was a(n) author
Serge NOIRET was a(n) author
{'name': 'Amanda Visconti', 'creatorType': 'author'}
Scott Weingart was a(n) author
Trevor Owens was a(n) author
Laura Mandell was a(n) author
Mike Cosgrave was a(n) author
Anna Dowling was a(n) author
Lynn Harding was a(n) author
Róisín O'Brien was a(n) author
Olivia Rohan was a(n) author
Mark Tatz was a(n) author
Daniel J Cohen was a(n) author
Roy Rosenzweig was a(n) author
Luis O Gómez was a(n) author
{'name': 'Śāntarakṣita', 'creatorType': 'author'}
Trevor Owens was a(n) author
Constantin Regamey was a(n) author
Mark Sample was a(n) author
Karin Dalziel was a(n) author
Patrick Murray-John was a(n) author
Andrew Prescott was a(n) author
C. M Sperberg-McQueen was a(n) author
Lou Burnard was a(n) author
Syd Bauman was a(n) author
David Scott was a(n) author
Sheila Brennan was a(n) author
Alan Galey was a(n) author
Lauran A. Kerr-Heraly was a(n) author
Syd Bauman was a(n) author
Lou Burnard was a(n) author
Dan Cohen was a(n) author
Dan Cohen was a(n) author
Todd L. Savitt was a(n) author
Adam Crymble was a(n) author
Tom Scheinfeldt was a(n) author
Amanda Visconti was a(n) author
Tito Orlandi was a(n) author
Amanda Visconti was a(n) author
Kathleen Fitzpatrick was a(n) author
Andrew Skilton was a(n) author
Kate Theimer was a(n) author
Catrice Barrett was a(n) author
Mike Cosgrave was a(n) contributor
Tom Scheinfeldt was a(n) author
 @foundhistory was a(n) author
Constantin Regamey was a(n) author
C. M Sperberg-McQueen was a(n) author
Lou Burnard was a(n) author
{'name': 'Amanda Visconti', 'creatorType': 'author'}
Geoffrey Chaucer was a(n) author
Larry Benson was a(n) editor
Robert Pratt was a(n) seriesEditor
F. N. Robinson was a(n) seriesEditor
Bryan Sinclair was a(n) author
Miriam Posner was a(n) author
Christoph Cüppers was a(n) author
Lee Sheridan Cox was a(n) author
Paja Faudree was a(n) author
John Frederick Bell was a(n) author
Louise Fradenburg was a(n) author
Louise M. Bishop was a(n) author
Robert Englebretson was a(n) author
Gila Aloni was a(n) author
Ben Kimpel was a(n) author
William F. Woods was a(n) author
Thomas J. Farrell was a(n) author
Tara Williams was a(n) author
Elizabeth Fowler was a(n) author
Thomas C. Stillinger was a(n) editor
R. W. Hanning was a(n) author
James McMurrin Dean was a(n) editor
Christian K. Zacher was a(n) editor
Marc S. Guidry was a(n) author
Robert M. Longsworth was a(n) author
Kemp Malone was a(n) author
Gregory Heyworth was a(n) author
Carl Lindahl was a(n) author
Jerome Mandel was a(n) author
Brooke Bergan was a(n) author
Karma Lochrie was a(n) author
{'name': 'sgsinclair', 'creatorType': 'contributor'}
Maxine Oland was a(n) contributor
Siobhan M. Hart was a(n) contributor
Liam Frink was a(n) contributor
Randolph Hall was a(n) author
Bethany Nowviskie was a(n) author
{'name': 'NEHgov', 'creatorType': 'contributor'}
Michelle van Ryn was a(n) author
Diana Burgess was a(n) author
Jennifer Malat was a(n) author
Joan Griffin was a(n) author
{'name': 'TEDtalksDirector', 'creatorType': 'contributor'}
{'name': 'britishlibrary', 'creatorType': 'contributor'}
Cristina Della Coletta was a(n) author
Jason Heppler was a(n) author
{'name': 'Park, S.', 'creatorType': 'author'}
T. Saracevic was a(n) author
J.D. Bolter was a(n) author
R. Grusin was a(n) author
Rob Styles was a(n) author
Wright R. Adams was a(n) author
Steve Anderson was a(n) author
Tara McPherson was a(n) author
D. Fusi was a(n) author
Marilisa Merolla was a(n) author
George P. Landow was a(n) author
Alisa Leonard-Hansen was a(n) author
 MLA was a(n) author
{'name': 'case', 'creatorType': 'contributor'}
James Gleick was a(n) author
Rose Holley was a(n) author
Max J. Egenhofer was a(n) author
Maria Cassella was a(n) author
 University of Virginia Scholars Lab was a(n) author
{'name': 'bezakor', 'creatorType': 'contributor'}
Cathy Davidson was a(n) author
{'name': 'sgsinclair', 'creatorType': 'contributor'}
Patrick Juola was a(n) author
Tito Orlandi was a(n) author
 Initiative for Digital Humanities, Media, and Culture Sites was a(n) author
John Willinsky was a(n) author
Richard Anderson was a(n) author
Hannah Frost was a(n) author
Nancy Hoebelheinrich was a(n) author
Keith Johnson was a(n) author
Michael L. Nelson was a(n) author
Catherine C Marshall was a(n) author
Frank McCown was a(n) author
T. Mills Kelly was a(n) author
Stephen Ramsay was a(n) author
{'name': 'Charles W. Bailey, Jr.', 'creatorType': 'author'}
Roy Rosenzweig was a(n) author
{'name': 'tim', 'creatorType': 'author'}
Amanda French was a(n) author
Orville Vernon Burton was a(n) author
Nick Montfort was a(n) author
Patsy Baudoin was a(n) author
John Bell was a(n) author
Ian Bogost was a(n) author
Jeremy Douglass was a(n) author
Mark C. Marino was a(n) author
Michael Mateas was a(n) author
Casey Reas was a(n) author
Mark Sample was a(n) author
Noah Vawter was a(n) author
{'name': 'Institute for the Study of the Ancient World, New York University', 'creatorType': 'author'}
 Old Dominion University was a(n) author
 Los Alamos National Library was a(n) author
Deborah L. Nichols was a(n) contributor
Christopher A. Pool was a(n) contributor
Patrick Sahle was a(n) author
William G. Thomas was a(n) author
{'name': 'duquesneuniversity', 'creatorType': 'contributor'}
Aaron Leonard was a(n) author
{'name': 'TRINITYCOLLEGEDUBLIN', 'creatorType': 'contributor'}
Mihaly Csikszentmihalyi was a(n) author
Michael Kramer was a(n) author
Jerome Rothenberg was a(n) contributor
Pierre Joris was a(n) contributor
{'name': 'University of California (System)', 'creatorType': 'contributor'}
{'name': 'University of California Press', 'creatorType': 'contributor'}
Koven Smith was a(n) author
David Bates was a(n) author
André Gunthert was a(n) author
Janet H. Murray was a(n) author
Jacques Barzun was a(n) author
Frank McCown was a(n) author
Joan A. Smith was a(n) author
Michael L. Nelson was a(n) author
Julia Flanders was a(n) author
Manuel Acevedo was a(n) author
Daniel J. Cohen was a(n) author
Roy Rosenzweig was a(n) author
Geoffrey Bilder was a(n) author
Harvey J. Miller was a(n) author
Jiawei Han was a(n) author
G. Burgarella was a(n) author
Jeremy Boggs was a(n) author
Jeff McClurken was a(n) author
Brett Bobley was a(n) presenter
Andrew Turner was a(n) author
John Hagan was a(n) author
Bethany Nowviskie was a(n) author
T. Saracevic was a(n) author
Daniel J. Cohen was a(n) author
Jennifer Egan was a(n) author
{'name': 'Scholarly Communication Institute, the Consortium of Humanities Centers and Institutes (CHCI)', 'creatorType': 'author'}
Helen J. Burgess was a(n) author
Jeanne Hamming was a(n) author
Peter Hirtle was a(n) author
Emily Hudson was a(n) author
Andrew Kenyon was a(n) author
George Laycock was a(n) author
James Soderholm was a(n) author
Jerome J. McGann was a(n) author
Garrett Stewart was a(n) author
T. Orlandi was a(n) author
{'name': 'Joseph Viscomi', 'creatorType': 'author'}
Steve Estes was a(n) author
Leonard Cassuto was a(n) author
Bethany Nowviskie was a(n) author
Al Baker was a(n) author
Nate Schweber was a(n) author
Black Women's Health Project  was a(n) author
Steve Estes was a(n) author
 admin was a(n) author
Joan K. Lippincott was a(n) author
Diane Goldenberg-Hart was a(n) author
Martin Grandjean was a(n) author
Martin Grandjean was a(n) author
Martin Grandjean was a(n) author
Martin Grandjean was a(n) author
Etienne Benson was a(n) author
Haeyoun Park was a(n) author
Alan McLean was a(n) author
Graham Roberts was a(n) author
Archie Tse was a(n) author
C. H. Epps was a(n) author
D. G. Johnson was a(n) author
A. L. Vaughan was a(n) author
Almila Akdag Salah was a(n) author
Cheng Gao was a(n) author
Krzysztof Suchecki was a(n) author
Andrea Scharnhorst was a(n) author
Pierluigi Sacco was a(n) author
Guido Ferilli was a(n) author
Giorgio Tavano Blessi was a(n) author
Mihaly Csikszentmihalyi was a(n) author
Laura Pappano was a(n) author
Tricia Rose was a(n) author
Charles Stewart was a(n) author
Andrea Forte was a(n) author
Vanessa Larco was a(n) author
Amy Bruckman was a(n) author
Mihaly Csikszentmihalyi was a(n) author
James Elkins was a(n) author
James Elkins was a(n) editor
Maria Pia Di Bella was a(n) editor
Mihaly Csikszentmihalyi was a(n) author
Richard H. Wilshusen was a(n) contributor
Gregson Schachner was a(n) contributor
James R. Allison was a(n) contributor
Michele Barbera was a(n) author
Lisa Gitelman was a(n) author
Holley Moyes was a(n) contributor
Mihaly Csikszentmihalyi was a(n) author
Adrian Duşa was a(n) editor
Dietrich Nelle was a(n) editor
Günter Stock was a(n) editor
 Wagner, Gert G. was a(n) editor
Daniel Alves was a(n) author
Joan Fragaszy Troyano was a(n) author
Léopold Delisle was a(n) author
 Bibliothèque nationale (France). Éditeur scientifique was a(n) contributor
Clifford E., Jr. Clark was a(n) author
Ray Siemens was a(n) author
Meagan Timney was a(n) author
Cara Leitch was a(n) author
Corina Koolen was a(n) author
Alex Garnett was a(n) author
Jason Puckett was a(n) author
C. Stephen Jaeger was a(n) author
Daniel J. Cohen was a(n) author
Roy Rosenzweig was a(n) author
EMORY COLLEGE HUMANITIES COUNCIL  was a(n) author
Hugh Cayless was a(n) author
Patrick Vinton Kirch was a(n) author
David Mosse was a(n) author
Vernon J. Knight was a(n) author
Jerry D. Spangler was a(n) author
Laura J. Olson was a(n) author
S. B. Adonʹeva was a(n) contributor
{'name': 'Marchionini, G., Plaisant, C., & Komlodi, A.', 'creatorType': 'author'}
{'name': 'Bishop, A. P. et al.', 'creatorType': 'editor'}
{'name': 'sgsinclair', 'creatorType': 'contributor'}
Timothy Burke was a(n) author
Paul Miller was a(n) author
{'name': 'sgsinclair', 'creatorType': 'contributor'}
Adam Crymble was a(n) author
F. Ciotti was a(n) author
G. Roncaglia was a(n) author
Todd Presner was a(n) author
{'name': 'UCLLHL', 'creatorType': 'contributor'}
{'name': 'internsUKmaster', 'creatorType': 'contributor'}
Mihaly Csikszentmihalyi was a(n) author
Associate Professor Stuart Selber Ph.D was a(n) author
{'name': 'britishlibrary', 'creatorType': 'contributor'}
{'name': 'tim', 'creatorType': 'author'}
Koven Smith was a(n) author
{'name': 'UCLLHL', 'creatorType': 'contributor'}
Mark Bauerlein was a(n) author
{'name': 'TEDtalksDirector', 'creatorType': 'contributor'}
Ryan Shaw was a(n) author
{'name': 'NEHgov', 'creatorType': 'contributor'}
William J. Turkel was a(n) author
Alan MacEachern was a(n) author
{'name': 'EdinburghUniversity', 'creatorType': 'contributor'}
{'name': 'JISCmedia', 'creatorType': 'contributor'}
{'name': 'DHSummerInstitute', 'creatorType': 'contributor'}
Cathy Davidson was a(n) author
{'name': 'ClassicsConfidentia1', 'creatorType': 'contributor'}
 Digital Library Federation was a(n) author
{'name': 'NEHgov', 'creatorType': 'contributor'}
E. Harsin Drager was a(n) author
Jean Bauer was a(n) author
Jeffrey T. Saletnik was a(n) author
 Andre Gunthert was a(n) author
Paula Petrik was a(n) author
Joshua Brown was a(n) author
 MLA was a(n) author
Katherine Harris was a(n) author
{'name': 'nietzschesource', 'creatorType': 'contributor'}
Leif Isaksen was a(n) author
{'name': 'Center for Digital Research and Scholarship', 'creatorType': 'author'}
Matthew Kirschenbaum was a(n) author
{'name': 'sgsinclair', 'creatorType': 'contributor'}
Nancy Maron was a(n) author
K. Kirby Smith was a(n) author
Matthew Loy was a(n) author
{'name': 'NEHgov', 'creatorType': 'contributor'}
John M. Unsworth was a(n) author
{'name': 'EdinburghUniversity', 'creatorType': 'contributor'}
Paul Greenberg was a(n) author
David J. Staley was a(n) author
Shannon Christine Mattern was a(n) author
Shawn Graham was a(n) author
Donald J. Waters was a(n) author
Roy Rosenzweig was a(n) author
William G. Thomas was a(n) author
Susan Schreibman was a(n) editor
Ray Siemens was a(n) editor
John Unsworth was a(n) editor
Jerome Rothenberg was a(n) author
Jeffrey Robinson was a(n) author
T. Numerico was a(n) author
D. Fiormonte was a(n) author
F. Tomasi was a(n) author
Michael O'Malley was a(n) author
Roy Rosenzweig was a(n) author
Roy Rosenzweig was a(n) author
Serge Noiret was a(n) author
William Pannapacker was a(n) author
Stacey Patton was a(n) author
{'name': 'Lee Ann Ghajar', 'creatorType': 'author'}
{'name': 'Lee Ann Ghajar', 'creatorType': 'author'}
{'name': 'Amanda Visconti', 'creatorType': 'author'}
Jr Charles W. Bailey was a(n) author
{'name': 'Cooper, A.', 'creatorType': 'author'}
Geoffrey Rockwell was a(n) author
Gary Miner was a(n) author
John Elder IV was a(n) author
Thomas Hill was a(n) author
Robert Nisbet was a(n) author
Dursun Delen was a(n) author
Zach Coble was a(n) author
John Unsworth was a(n) author
Prof Hacker was a(n) author
Todd Presner was a(n) author
 CDRH was a(n) author
 CDRH was a(n) author
Kathleen Fitzpatrick was a(n) author
{'name': 'SURFfoundation ', 'creatorType': 'author'}
{'name': 'Diane Harley et al.', 'creatorType': 'author'}
{'name': 'Alice Grant Consulting', 'creatorType': 'author'}
John Unsworth was a(n) author
Lilly Nguyen was a(n) author
Katie Shilton was a(n) author
Alex Koohang was a(n) author
Dan Cohen was a(n) author
Simon Tanner was a(n) author
Fred Gibbs was a(n) author
James Smithies was a(n) author
Bill S was a(n) artist
Sheila Cavanagh was a(n) author
{'name': 'Google', 'creatorType': 'contributor'}
{'name': 'nh1stim', 'creatorType': 'contributor'}
{'name': 'TEDtalksDirector', 'creatorType': 'contributor'}
Jr Charles W. Bailey was a(n) author
J.D. Bolter was a(n) author
R. Grusin was a(n) author
A. Marinelli was a(n) author
B. Gennaro was a(n) author
F. Tomasi was a(n) author
Tito Orlandi was a(n) author
Fabio Ciracì was a(n) author
 Demand was a(n) editor
{'name': 'UFlibraries', 'creatorType': 'contributor'}
{'name': 'TEDtalksDirector', 'creatorType': 'contributor'}
{'name': 'ArchimedesPalimpsest', 'creatorType': 'contributor'}
{'name': 'britishlibrary', 'creatorType': 'contributor'}
G. Gigliozzi was a(n) author
F. Ciotti was a(n) author
G. Roncaglia was a(n) author
R. Baroncelli was a(n) author
V. Marangi was a(n) author
{'name': 'britishlibrary', 'creatorType': 'contributor'}
{'name': 'britishlibrary', 'creatorType': 'contributor'}
{'name': 'DukeJewishStudies', 'creatorType': 'contributor'}
{'name': 'britishlibrary', 'creatorType': 'contributor'}
{'name': 'TEDxYouth', 'creatorType': 'contributor'}
{'name': 'tpentool', 'creatorType': 'contributor'}
{'name': 'museumcn', 'creatorType': 'contributor'}
{'name': 'sgsinclair', 'creatorType': 'contributor'}
{'name': 'kimhwrth', 'creatorType': 'contributor'}
{'name': 'britishlibrary', 'creatorType': 'contributor'}
{'name': 'sgsinclair', 'creatorType': 'contributor'}
{'name': 'textgrid', 'creatorType': 'contributor'}
{'name': 'LostInTheOrdos', 'creatorType': 'contributor'}
{'name': 'TEDxTalks', 'creatorType': 'contributor'}
{'name': 'columbiauniversity', 'creatorType': 'contributor'}
{'name': 'sgsinclair', 'creatorType': 'contributor'}
{'name': 'funkmelodious', 'creatorType': 'contributor'}
{'name': 'ejcnettube', 'creatorType': 'contributor'}
{'name': 'VOAvideo', 'creatorType': 'contributor'}
{'name': 'NEHgov', 'creatorType': 'contributor'}
{'name': 'britishlibrary', 'creatorType': 'contributor'}
{'name': 'britishlibrary', 'creatorType': 'contributor'}
{'name': 'teamOKAPI', 'creatorType': 'contributor'}
{'name': 'teamOKAPI', 'creatorType': 'contributor'}
Patrik Svensson was a(n) author
Susan Schreibman was a(n) author
Raymond George Siemens was a(n) author
John M. Unsworth was a(n) author
Domenico Secondulfo was a(n) author
{'name': 'tim', 'creatorType': 'author'}
Jodi Dean was a(n) author
Vannevar Bush was a(n) author
Lev Manovich was a(n) author
Joe Sullivan was a(n) author
Kathleen Brady was a(n) author
Schuyler Erle was a(n) author
Rich Gibson was a(n) author
Jo Walsh was a(n) author
Chris Anderson was a(n) author
Susan Cairns was a(n) author
Seb Chan was a(n) author
Patrik Svensson was a(n) author
Chris Forster was a(n) author
Susan Hockey was a(n) author
Susan Schreibman was a(n) editor
Ray Siemens was a(n) editor
John Unsworth was a(n) editor
Ian Bogost was a(n) author
Kenneth Dyson was a(n) author
Kevin Featherstone was a(n) author
George Michalopoulos was a(n) author
Jeffrey A. Rydberg-Cox was a(n) author
Marinos Ioannides was a(n) author
{'name': 'Kathleen Fitzpatrick', 'creatorType': 'author'}
Serge NOIRET was a(n) author
M. Eliade was a(n) author
W. R Trask was a(n) author
Lev Manovich was a(n) author
Joshua Getzler was a(n) author
Robert Black was a(n) author
William Michael Purcell was a(n) author
 Louise M. Heatley was a(n) author
D. Secondulfo was a(n) author
Michael Joyce was a(n) author
Shelley Jackson was a(n) author
Amanda French was a(n) author
Jim Brown was a(n) author
Orrin Nan Chung Wang was a(n) author
Gavin. Hopps was a(n) author
Paulo Freire was a(n) author
Allison Adler Kroll was a(n) author
Bethany Nowviskie was a(n) author
Conrad Rudolph was a(n) author
Richard White was a(n) author
L. Shi was a(n) author
 Sibyl Schaefer was a(n) author
 Davis, Philip M. was a(n) author
Matthew J. L. Connolly was a(n) author
Geoffrey Rockwell was a(n) author
Laura Mandell was a(n) author
Alan Liu was a(n) author
Tullia Rushton was a(n) author
Jeremy Boggs was a(n) author
Mark Sample was a(n) author
 Amanda French was a(n) author
Bethany Nowviskie was a(n) author
Daniel J. Cohen was a(n) author
Michael Frisch was a(n) author
Patrick Gallagher was a(n) author
Steve Mintz was a(n) author
Kirsten Sword was a(n) author
Amy Murrell Taylor was a(n) author
William G. III Thomas was a(n) author
William J. Turkel was a(n) author
Daniel J. Cohen was a(n) author
William G. Thomas was a(n) author
Edward L. Ayers was a(n) author
Orville Vernon Burton was a(n) contributor
Roy Rosenzweig was a(n) author
Edward Ayers was a(n) author
Roy Rosenzweig was a(n) author
Daniel J. Cohen was a(n) author
Daniel J. Cohen was a(n) author
Roy Rosenzweig was a(n) author
Edward L. Ayers was a(n) author
Edward L. Ayers was a(n) author
Michael O'Malley was a(n) author
Roy Rosenzweig was a(n) author
Raymond Lo was a(n) author
Guhan Viswanathan was a(n) author
Dave Weissman was a(n) author
Koven Smith was a(n) author
Koven Smith was a(n) author
C. O. I. Digital Policy Manager was a(n) author
Lorcan Dempsey was a(n) author
Roy Tennant was a(n) author
Peter Suber was a(n) author
Hugh Cayless was a(n) author
Kevin Guthrie was a(n) author
Laura Gasaway was a(n) author
Samson C. Soong was a(n) author
Raym Crow was a(n) author
Diane M. Zorich was a(n) author
Edward R. Tufte was a(n) author

Now we are error-free! Let's circle back to those first-nameless creators and handle them more nicely.


In [17]:
for item in our_items:
    if( 'creators' not in item['data'] ):
       continue
    for creator in item['data']['creators']:
        full_name = ''
        if( 'firstName' in creator ):
            full_name = creator['firstName'] + ' ' + creator['lastName']
        else:
            full_name = creator['name']
        print("%s was a(n) %s" % ( full_name, creator['creatorType'] ))


 National Center for Transgender Equality was a(n) author
Mark Z. Danielewski was a(n) author
Alcuin Blamires was a(n) author
Charles E Rosenberg was a(n) author
Simon Egenfeldt-Nielsen was a(n) author
Jonas Heide Smith was a(n) author
Susana Pajares Tosca was a(n) author
Patrik Svensson was a(n) author
Henry Nash Smith was a(n) author
Li Liu was a(n) author
Xingcan Chen was a(n) contributor
Robert Darnton was a(n) author
Claude Chapdelaine was a(n) contributor
Association des archéologues du Québec was a(n) author
British History Online was a(n) author
Serge NOIRET was a(n) author
Amanda Visconti was a(n) author
Scott Weingart was a(n) author
Trevor Owens was a(n) author
Laura Mandell was a(n) author
Mike Cosgrave was a(n) author
Anna Dowling was a(n) author
Lynn Harding was a(n) author
Róisín O'Brien was a(n) author
Olivia Rohan was a(n) author
Mark Tatz was a(n) author
Daniel J Cohen was a(n) author
Roy Rosenzweig was a(n) author
Luis O Gómez was a(n) author
Śāntarakṣita was a(n) author
Trevor Owens was a(n) author
Constantin Regamey was a(n) author
Mark Sample was a(n) author
Karin Dalziel was a(n) author
Patrick Murray-John was a(n) author
Andrew Prescott was a(n) author
C. M Sperberg-McQueen was a(n) author
Lou Burnard was a(n) author
Syd Bauman was a(n) author
David Scott was a(n) author
Sheila Brennan was a(n) author
Alan Galey was a(n) author
Lauran A. Kerr-Heraly was a(n) author
Syd Bauman was a(n) author
Lou Burnard was a(n) author
Dan Cohen was a(n) author
Dan Cohen was a(n) author
Todd L. Savitt was a(n) author
Adam Crymble was a(n) author
Tom Scheinfeldt was a(n) author
Amanda Visconti was a(n) author
Tito Orlandi was a(n) author
Amanda Visconti was a(n) author
Kathleen Fitzpatrick was a(n) author
Andrew Skilton was a(n) author
Kate Theimer was a(n) author
Catrice Barrett was a(n) author
Mike Cosgrave was a(n) contributor
Tom Scheinfeldt was a(n) author
 @foundhistory was a(n) author
Constantin Regamey was a(n) author
C. M Sperberg-McQueen was a(n) author
Lou Burnard was a(n) author
Amanda Visconti was a(n) author
Geoffrey Chaucer was a(n) author
Larry Benson was a(n) editor
Robert Pratt was a(n) seriesEditor
F. N. Robinson was a(n) seriesEditor
Bryan Sinclair was a(n) author
Miriam Posner was a(n) author
Christoph Cüppers was a(n) author
Lee Sheridan Cox was a(n) author
Paja Faudree was a(n) author
John Frederick Bell was a(n) author
Louise Fradenburg was a(n) author
Louise M. Bishop was a(n) author
Robert Englebretson was a(n) author
Gila Aloni was a(n) author
Ben Kimpel was a(n) author
William F. Woods was a(n) author
Thomas J. Farrell was a(n) author
Tara Williams was a(n) author
Elizabeth Fowler was a(n) author
Thomas C. Stillinger was a(n) editor
R. W. Hanning was a(n) author
James McMurrin Dean was a(n) editor
Christian K. Zacher was a(n) editor
Marc S. Guidry was a(n) author
Robert M. Longsworth was a(n) author
Kemp Malone was a(n) author
Gregory Heyworth was a(n) author
Carl Lindahl was a(n) author
Jerome Mandel was a(n) author
Brooke Bergan was a(n) author
Karma Lochrie was a(n) author
sgsinclair was a(n) contributor
Maxine Oland was a(n) contributor
Siobhan M. Hart was a(n) contributor
Liam Frink was a(n) contributor
Randolph Hall was a(n) author
Bethany Nowviskie was a(n) author
NEHgov was a(n) contributor
Michelle van Ryn was a(n) author
Diana Burgess was a(n) author
Jennifer Malat was a(n) author
Joan Griffin was a(n) author
TEDtalksDirector was a(n) contributor
britishlibrary was a(n) contributor
Cristina Della Coletta was a(n) author
Jason Heppler was a(n) author
Park, S. was a(n) author
T. Saracevic was a(n) author
J.D. Bolter was a(n) author
R. Grusin was a(n) author
Rob Styles was a(n) author
Wright R. Adams was a(n) author
Steve Anderson was a(n) author
Tara McPherson was a(n) author
D. Fusi was a(n) author
Marilisa Merolla was a(n) author
George P. Landow was a(n) author
Alisa Leonard-Hansen was a(n) author
 MLA was a(n) author
case was a(n) contributor
James Gleick was a(n) author
Rose Holley was a(n) author
Max J. Egenhofer was a(n) author
Maria Cassella was a(n) author
 University of Virginia Scholars Lab was a(n) author
bezakor was a(n) contributor
Cathy Davidson was a(n) author
sgsinclair was a(n) contributor
Patrick Juola was a(n) author
Tito Orlandi was a(n) author
 Initiative for Digital Humanities, Media, and Culture Sites was a(n) author
John Willinsky was a(n) author
Richard Anderson was a(n) author
Hannah Frost was a(n) author
Nancy Hoebelheinrich was a(n) author
Keith Johnson was a(n) author
Michael L. Nelson was a(n) author
Catherine C Marshall was a(n) author
Frank McCown was a(n) author
T. Mills Kelly was a(n) author
Stephen Ramsay was a(n) author
Charles W. Bailey, Jr. was a(n) author
Roy Rosenzweig was a(n) author
tim was a(n) author
Amanda French was a(n) author
Orville Vernon Burton was a(n) author
Nick Montfort was a(n) author
Patsy Baudoin was a(n) author
John Bell was a(n) author
Ian Bogost was a(n) author
Jeremy Douglass was a(n) author
Mark C. Marino was a(n) author
Michael Mateas was a(n) author
Casey Reas was a(n) author
Mark Sample was a(n) author
Noah Vawter was a(n) author
Institute for the Study of the Ancient World, New York University was a(n) author
 Old Dominion University was a(n) author
 Los Alamos National Library was a(n) author
Deborah L. Nichols was a(n) contributor
Christopher A. Pool was a(n) contributor
Patrick Sahle was a(n) author
William G. Thomas was a(n) author
duquesneuniversity was a(n) contributor
Aaron Leonard was a(n) author
TRINITYCOLLEGEDUBLIN was a(n) contributor
Mihaly Csikszentmihalyi was a(n) author
Michael Kramer was a(n) author
Jerome Rothenberg was a(n) contributor
Pierre Joris was a(n) contributor
University of California (System) was a(n) contributor
University of California Press was a(n) contributor
Koven Smith was a(n) author
David Bates was a(n) author
André Gunthert was a(n) author
Janet H. Murray was a(n) author
Jacques Barzun was a(n) author
Frank McCown was a(n) author
Joan A. Smith was a(n) author
Michael L. Nelson was a(n) author
Julia Flanders was a(n) author
Manuel Acevedo was a(n) author
Daniel J. Cohen was a(n) author
Roy Rosenzweig was a(n) author
Geoffrey Bilder was a(n) author
Harvey J. Miller was a(n) author
Jiawei Han was a(n) author
G. Burgarella was a(n) author
Jeremy Boggs was a(n) author
Jeff McClurken was a(n) author
Brett Bobley was a(n) presenter
Andrew Turner was a(n) author
John Hagan was a(n) author
Bethany Nowviskie was a(n) author
T. Saracevic was a(n) author
Daniel J. Cohen was a(n) author
Jennifer Egan was a(n) author
Scholarly Communication Institute, the Consortium of Humanities Centers and Institutes (CHCI) was a(n) author
Helen J. Burgess was a(n) author
Jeanne Hamming was a(n) author
Peter Hirtle was a(n) author
Emily Hudson was a(n) author
Andrew Kenyon was a(n) author
George Laycock was a(n) author
James Soderholm was a(n) author
Jerome J. McGann was a(n) author
Garrett Stewart was a(n) author
T. Orlandi was a(n) author
Joseph Viscomi was a(n) author
Steve Estes was a(n) author
Leonard Cassuto was a(n) author
Bethany Nowviskie was a(n) author
Al Baker was a(n) author
Nate Schweber was a(n) author
Black Women's Health Project  was a(n) author
Steve Estes was a(n) author
 admin was a(n) author
Joan K. Lippincott was a(n) author
Diane Goldenberg-Hart was a(n) author
Martin Grandjean was a(n) author
Martin Grandjean was a(n) author
Martin Grandjean was a(n) author
Martin Grandjean was a(n) author
Etienne Benson was a(n) author
Haeyoun Park was a(n) author
Alan McLean was a(n) author
Graham Roberts was a(n) author
Archie Tse was a(n) author
C. H. Epps was a(n) author
D. G. Johnson was a(n) author
A. L. Vaughan was a(n) author
Almila Akdag Salah was a(n) author
Cheng Gao was a(n) author
Krzysztof Suchecki was a(n) author
Andrea Scharnhorst was a(n) author
Pierluigi Sacco was a(n) author
Guido Ferilli was a(n) author
Giorgio Tavano Blessi was a(n) author
Mihaly Csikszentmihalyi was a(n) author
Laura Pappano was a(n) author
Tricia Rose was a(n) author
Charles Stewart was a(n) author
Andrea Forte was a(n) author
Vanessa Larco was a(n) author
Amy Bruckman was a(n) author
Mihaly Csikszentmihalyi was a(n) author
James Elkins was a(n) author
James Elkins was a(n) editor
Maria Pia Di Bella was a(n) editor
Mihaly Csikszentmihalyi was a(n) author
Richard H. Wilshusen was a(n) contributor
Gregson Schachner was a(n) contributor
James R. Allison was a(n) contributor
Michele Barbera was a(n) author
Lisa Gitelman was a(n) author
Holley Moyes was a(n) contributor
Mihaly Csikszentmihalyi was a(n) author
Adrian Duşa was a(n) editor
Dietrich Nelle was a(n) editor
Günter Stock was a(n) editor
 Wagner, Gert G. was a(n) editor
Daniel Alves was a(n) author
Joan Fragaszy Troyano was a(n) author
Léopold Delisle was a(n) author
 Bibliothèque nationale (France). Éditeur scientifique was a(n) contributor
Clifford E., Jr. Clark was a(n) author
Ray Siemens was a(n) author
Meagan Timney was a(n) author
Cara Leitch was a(n) author
Corina Koolen was a(n) author
Alex Garnett was a(n) author
Jason Puckett was a(n) author
C. Stephen Jaeger was a(n) author
Daniel J. Cohen was a(n) author
Roy Rosenzweig was a(n) author
EMORY COLLEGE HUMANITIES COUNCIL  was a(n) author
Hugh Cayless was a(n) author
Patrick Vinton Kirch was a(n) author
David Mosse was a(n) author
Vernon J. Knight was a(n) author
Jerry D. Spangler was a(n) author
Laura J. Olson was a(n) author
S. B. Adonʹeva was a(n) contributor
Marchionini, G., Plaisant, C., & Komlodi, A. was a(n) author
Bishop, A. P. et al. was a(n) editor
sgsinclair was a(n) contributor
Timothy Burke was a(n) author
Paul Miller was a(n) author
sgsinclair was a(n) contributor
Adam Crymble was a(n) author
F. Ciotti was a(n) author
G. Roncaglia was a(n) author
Todd Presner was a(n) author
UCLLHL was a(n) contributor
internsUKmaster was a(n) contributor
Mihaly Csikszentmihalyi was a(n) author
Associate Professor Stuart Selber Ph.D was a(n) author
britishlibrary was a(n) contributor
tim was a(n) author
Koven Smith was a(n) author
UCLLHL was a(n) contributor
Mark Bauerlein was a(n) author
TEDtalksDirector was a(n) contributor
Ryan Shaw was a(n) author
NEHgov was a(n) contributor
William J. Turkel was a(n) author
Alan MacEachern was a(n) author
EdinburghUniversity was a(n) contributor
JISCmedia was a(n) contributor
DHSummerInstitute was a(n) contributor
Cathy Davidson was a(n) author
ClassicsConfidentia1 was a(n) contributor
 Digital Library Federation was a(n) author
NEHgov was a(n) contributor
E. Harsin Drager was a(n) author
Jean Bauer was a(n) author
Jeffrey T. Saletnik was a(n) author
 Andre Gunthert was a(n) author
Paula Petrik was a(n) author
Joshua Brown was a(n) author
 MLA was a(n) author
Katherine Harris was a(n) author
nietzschesource was a(n) contributor
Leif Isaksen was a(n) author
Center for Digital Research and Scholarship was a(n) author
Matthew Kirschenbaum was a(n) author
sgsinclair was a(n) contributor
Nancy Maron was a(n) author
K. Kirby Smith was a(n) author
Matthew Loy was a(n) author
NEHgov was a(n) contributor
John M. Unsworth was a(n) author
EdinburghUniversity was a(n) contributor
Paul Greenberg was a(n) author
David J. Staley was a(n) author
Shannon Christine Mattern was a(n) author
Shawn Graham was a(n) author
Donald J. Waters was a(n) author
Roy Rosenzweig was a(n) author
William G. Thomas was a(n) author
Susan Schreibman was a(n) editor
Ray Siemens was a(n) editor
John Unsworth was a(n) editor
Jerome Rothenberg was a(n) author
Jeffrey Robinson was a(n) author
T. Numerico was a(n) author
D. Fiormonte was a(n) author
F. Tomasi was a(n) author
Michael O'Malley was a(n) author
Roy Rosenzweig was a(n) author
Roy Rosenzweig was a(n) author
Serge Noiret was a(n) author
William Pannapacker was a(n) author
Stacey Patton was a(n) author
Lee Ann Ghajar was a(n) author
Lee Ann Ghajar was a(n) author
Amanda Visconti was a(n) author
Jr Charles W. Bailey was a(n) author
Cooper, A. was a(n) author
Geoffrey Rockwell was a(n) author
Gary Miner was a(n) author
John Elder IV was a(n) author
Thomas Hill was a(n) author
Robert Nisbet was a(n) author
Dursun Delen was a(n) author
Zach Coble was a(n) author
John Unsworth was a(n) author
Prof Hacker was a(n) author
Todd Presner was a(n) author
 CDRH was a(n) author
 CDRH was a(n) author
Kathleen Fitzpatrick was a(n) author
SURFfoundation  was a(n) author
Diane Harley et al. was a(n) author
Alice Grant Consulting was a(n) author
John Unsworth was a(n) author
Lilly Nguyen was a(n) author
Katie Shilton was a(n) author
Alex Koohang was a(n) author
Dan Cohen was a(n) author
Simon Tanner was a(n) author
Fred Gibbs was a(n) author
James Smithies was a(n) author
Bill S was a(n) artist
Sheila Cavanagh was a(n) author
Google was a(n) contributor
nh1stim was a(n) contributor
TEDtalksDirector was a(n) contributor
Jr Charles W. Bailey was a(n) author
J.D. Bolter was a(n) author
R. Grusin was a(n) author
A. Marinelli was a(n) author
B. Gennaro was a(n) author
F. Tomasi was a(n) author
Tito Orlandi was a(n) author
Fabio Ciracì was a(n) author
 Demand was a(n) editor
UFlibraries was a(n) contributor
TEDtalksDirector was a(n) contributor
ArchimedesPalimpsest was a(n) contributor
britishlibrary was a(n) contributor
G. Gigliozzi was a(n) author
F. Ciotti was a(n) author
G. Roncaglia was a(n) author
R. Baroncelli was a(n) author
V. Marangi was a(n) author
britishlibrary was a(n) contributor
britishlibrary was a(n) contributor
DukeJewishStudies was a(n) contributor
britishlibrary was a(n) contributor
TEDxYouth was a(n) contributor
tpentool was a(n) contributor
museumcn was a(n) contributor
sgsinclair was a(n) contributor
kimhwrth was a(n) contributor
britishlibrary was a(n) contributor
sgsinclair was a(n) contributor
textgrid was a(n) contributor
LostInTheOrdos was a(n) contributor
TEDxTalks was a(n) contributor
columbiauniversity was a(n) contributor
sgsinclair was a(n) contributor
funkmelodious was a(n) contributor
ejcnettube was a(n) contributor
VOAvideo was a(n) contributor
NEHgov was a(n) contributor
britishlibrary was a(n) contributor
britishlibrary was a(n) contributor
teamOKAPI was a(n) contributor
teamOKAPI was a(n) contributor
Patrik Svensson was a(n) author
Susan Schreibman was a(n) author
Raymond George Siemens was a(n) author
John M. Unsworth was a(n) author
Domenico Secondulfo was a(n) author
tim was a(n) author
Jodi Dean was a(n) author
Vannevar Bush was a(n) author
Lev Manovich was a(n) author
Joe Sullivan was a(n) author
Kathleen Brady was a(n) author
Schuyler Erle was a(n) author
Rich Gibson was a(n) author
Jo Walsh was a(n) author
Chris Anderson was a(n) author
Susan Cairns was a(n) author
Seb Chan was a(n) author
Patrik Svensson was a(n) author
Chris Forster was a(n) author
Susan Hockey was a(n) author
Susan Schreibman was a(n) editor
Ray Siemens was a(n) editor
John Unsworth was a(n) editor
Ian Bogost was a(n) author
Kenneth Dyson was a(n) author
Kevin Featherstone was a(n) author
George Michalopoulos was a(n) author
Jeffrey A. Rydberg-Cox was a(n) author
Marinos Ioannides was a(n) author
Kathleen Fitzpatrick was a(n) author
Serge NOIRET was a(n) author
M. Eliade was a(n) author
W. R Trask was a(n) author
Lev Manovich was a(n) author
Joshua Getzler was a(n) author
Robert Black was a(n) author
William Michael Purcell was a(n) author
 Louise M. Heatley was a(n) author
D. Secondulfo was a(n) author
Michael Joyce was a(n) author
Shelley Jackson was a(n) author
Amanda French was a(n) author
Jim Brown was a(n) author
Orrin Nan Chung Wang was a(n) author
Gavin. Hopps was a(n) author
Paulo Freire was a(n) author
Allison Adler Kroll was a(n) author
Bethany Nowviskie was a(n) author
Conrad Rudolph was a(n) author
Richard White was a(n) author
L. Shi was a(n) author
 Sibyl Schaefer was a(n) author
 Davis, Philip M. was a(n) author
Matthew J. L. Connolly was a(n) author
Geoffrey Rockwell was a(n) author
Laura Mandell was a(n) author
Alan Liu was a(n) author
Tullia Rushton was a(n) author
Jeremy Boggs was a(n) author
Mark Sample was a(n) author
 Amanda French was a(n) author
Bethany Nowviskie was a(n) author
Daniel J. Cohen was a(n) author
Michael Frisch was a(n) author
Patrick Gallagher was a(n) author
Steve Mintz was a(n) author
Kirsten Sword was a(n) author
Amy Murrell Taylor was a(n) author
William G. III Thomas was a(n) author
William J. Turkel was a(n) author
Daniel J. Cohen was a(n) author
William G. Thomas was a(n) author
Edward L. Ayers was a(n) author
Orville Vernon Burton was a(n) contributor
Roy Rosenzweig was a(n) author
Edward Ayers was a(n) author
Roy Rosenzweig was a(n) author
Daniel J. Cohen was a(n) author
Daniel J. Cohen was a(n) author
Roy Rosenzweig was a(n) author
Edward L. Ayers was a(n) author
Edward L. Ayers was a(n) author
Michael O'Malley was a(n) author
Roy Rosenzweig was a(n) author
Raymond Lo was a(n) author
Guhan Viswanathan was a(n) author
Dave Weissman was a(n) author
Koven Smith was a(n) author
Koven Smith was a(n) author
C. O. I. Digital Policy Manager was a(n) author
Lorcan Dempsey was a(n) author
Roy Tennant was a(n) author
Peter Suber was a(n) author
Hugh Cayless was a(n) author
Kevin Guthrie was a(n) author
Laura Gasaway was a(n) author
Samson C. Soong was a(n) author
Raym Crow was a(n) author
Diane M. Zorich was a(n) author
Edward R. Tufte was a(n) author

There we are! We can list our creators, which means we can graph them! We are going to use our good old graphviz Python library to create the graph.


In [18]:
import graphviz
%load_ext hierarchymagic

Now we can make our graph, which is undirected (otherwise we would have made a graphviz.Digraph())


In [19]:
author_graph = graphviz.Graph()

and we can put in the data.

Here we want to have an edge between two authors whenever they worked together on a publication, whether as author or editor or contributor or what. Hang onto your hats through these loops!


In [20]:
for item in our_items:
    if( 'creators' not in item['data'] ):
       continue
    # First, make a list of all the collaborators for this item.
    item_collaborators = []
    for creator in item['data']['creators']:
        full_name = ''
        if( 'firstName' in creator ):
            full_name = creator['firstName'] + ' ' + creator['lastName']
        else:
            full_name = creator['name']
        item_collaborators.append( full_name )
    # Second, add each pair of collaborators to the graph as an edge.
    while( len( item_collaborators ) > 1 ):
        me = item_collaborators.pop()
        for you in item_collaborators:
            author_graph.edge( me, you )

Now we could print out the author graph and copy/paste it into a new cell, or we could use the handy make_dotcell magic function that we used in the last class.


In [21]:
## Here is the function we need
def make_dotcell( thegraph, format="svg" ):
    cell_content = "%%dot " + "-f %s\n%s" % (format, thegraph.source)
    return cell_content

And then we use it...


In [22]:
%recall make_dotcell( author_graph )


Couldn't evaluate or find in history: make_dotcell( author_graph )

In [23]:
%%dot -f svg
graph {
		"Susana Pajares Tosca" -- "Simon Egenfeldt-Nielsen"
		"Susana Pajares Tosca" -- "Jonas Heide Smith"
		"Jonas Heide Smith" -- "Simon Egenfeldt-Nielsen"
		"Xingcan Chen" -- "Li Liu"
		"Association des archéologues du Québec" -- "Claude Chapdelaine"
		"Olivia Rohan" -- "Mike Cosgrave"
		"Olivia Rohan" -- "Anna Dowling"
		"Olivia Rohan" -- "Lynn Harding"
		"Olivia Rohan" -- "Róisín O'Brien"
		"Róisín O'Brien" -- "Mike Cosgrave"
		"Róisín O'Brien" -- "Anna Dowling"
		"Róisín O'Brien" -- "Lynn Harding"
		"Lynn Harding" -- "Mike Cosgrave"
		"Lynn Harding" -- "Anna Dowling"
		"Anna Dowling" -- "Mike Cosgrave"
		"Roy Rosenzweig" -- "Daniel J Cohen"
		"Śāntarakṣita" -- "Luis O Gómez"
		"Syd Bauman" -- "C. M Sperberg-McQueen"
		"Syd Bauman" -- "Lou Burnard"
		"Lou Burnard" -- "C. M Sperberg-McQueen"
		"Lou Burnard" -- "Syd Bauman"
		" @foundhistory" -- "Tom Scheinfeldt"
		"Lou Burnard" -- "C. M Sperberg-McQueen"
		"F. N. Robinson" -- "Geoffrey Chaucer"
		"F. N. Robinson" -- "Larry Benson"
		"F. N. Robinson" -- "Robert Pratt"
		"Robert Pratt" -- "Geoffrey Chaucer"
		"Robert Pratt" -- "Larry Benson"
		"Larry Benson" -- "Geoffrey Chaucer"
		"Thomas C. Stillinger" -- "Elizabeth Fowler"
		"Christian K. Zacher" -- "R. W. Hanning"
		"Christian K. Zacher" -- "James McMurrin Dean"
		"James McMurrin Dean" -- "R. W. Hanning"
		"Liam Frink" -- "Maxine Oland"
		"Liam Frink" -- "Siobhan M. Hart"
		"Siobhan M. Hart" -- "Maxine Oland"
		"Joan Griffin" -- "Michelle van Ryn"
		"Joan Griffin" -- "Diana Burgess"
		"Joan Griffin" -- "Jennifer Malat"
		"Jennifer Malat" -- "Michelle van Ryn"
		"Jennifer Malat" -- "Diana Burgess"
		"Diana Burgess" -- "Michelle van Ryn"
		"R. Grusin" -- "J.D. Bolter"
		"Tara McPherson" -- "Steve Anderson"
		"Keith Johnson" -- "Richard Anderson"
		"Keith Johnson" -- "Hannah Frost"
		"Keith Johnson" -- "Nancy Hoebelheinrich"
		"Nancy Hoebelheinrich" -- "Richard Anderson"
		"Nancy Hoebelheinrich" -- "Hannah Frost"
		"Hannah Frost" -- "Richard Anderson"
		"Frank McCown" -- "Michael L. Nelson"
		"Frank McCown" -- "Catherine C Marshall"
		"Catherine C Marshall" -- "Michael L. Nelson"
		"Noah Vawter" -- "Nick Montfort"
		"Noah Vawter" -- "Patsy Baudoin"
		"Noah Vawter" -- "John Bell"
		"Noah Vawter" -- "Ian Bogost"
		"Noah Vawter" -- "Jeremy Douglass"
		"Noah Vawter" -- "Mark C. Marino"
		"Noah Vawter" -- "Michael Mateas"
		"Noah Vawter" -- "Casey Reas"
		"Noah Vawter" -- "Mark Sample"
		"Mark Sample" -- "Nick Montfort"
		"Mark Sample" -- "Patsy Baudoin"
		"Mark Sample" -- "John Bell"
		"Mark Sample" -- "Ian Bogost"
		"Mark Sample" -- "Jeremy Douglass"
		"Mark Sample" -- "Mark C. Marino"
		"Mark Sample" -- "Michael Mateas"
		"Mark Sample" -- "Casey Reas"
		"Casey Reas" -- "Nick Montfort"
		"Casey Reas" -- "Patsy Baudoin"
		"Casey Reas" -- "John Bell"
		"Casey Reas" -- "Ian Bogost"
		"Casey Reas" -- "Jeremy Douglass"
		"Casey Reas" -- "Mark C. Marino"
		"Casey Reas" -- "Michael Mateas"
		"Michael Mateas" -- "Nick Montfort"
		"Michael Mateas" -- "Patsy Baudoin"
		"Michael Mateas" -- "John Bell"
		"Michael Mateas" -- "Ian Bogost"
		"Michael Mateas" -- "Jeremy Douglass"
		"Michael Mateas" -- "Mark C. Marino"
		"Mark C. Marino" -- "Nick Montfort"
		"Mark C. Marino" -- "Patsy Baudoin"
		"Mark C. Marino" -- "John Bell"
		"Mark C. Marino" -- "Ian Bogost"
		"Mark C. Marino" -- "Jeremy Douglass"
		"Jeremy Douglass" -- "Nick Montfort"
		"Jeremy Douglass" -- "Patsy Baudoin"
		"Jeremy Douglass" -- "John Bell"
		"Jeremy Douglass" -- "Ian Bogost"
		"Ian Bogost" -- "Nick Montfort"
		"Ian Bogost" -- "Patsy Baudoin"
		"Ian Bogost" -- "John Bell"
		"John Bell" -- "Nick Montfort"
		"John Bell" -- "Patsy Baudoin"
		"Patsy Baudoin" -- "Nick Montfort"
		" Los Alamos National Library" -- " Old Dominion University"
		"Christopher A. Pool" -- "Deborah L. Nichols"
		"University of California Press" -- "Jerome Rothenberg"
		"University of California Press" -- "Pierre Joris"
		"University of California Press" -- "University of California (System)"
		"University of California (System)" -- "Jerome Rothenberg"
		"University of California (System)" -- "Pierre Joris"
		"Pierre Joris" -- "Jerome Rothenberg"
		"Michael L. Nelson" -- "Frank McCown"
		"Michael L. Nelson" -- "Joan A. Smith"
		"Joan A. Smith" -- "Frank McCown"
		"Roy Rosenzweig" -- "Daniel J. Cohen"
		"Jiawei Han" -- "Harvey J. Miller"
		"Jeanne Hamming" -- "Helen J. Burgess"
		"Andrew Kenyon" -- "Peter Hirtle"
		"Andrew Kenyon" -- "Emily Hudson"
		"Emily Hudson" -- "Peter Hirtle"
		"Jerome J. McGann" -- "James Soderholm"
		"Nate Schweber" -- "Al Baker"
		"Diane Goldenberg-Hart" -- "Joan K. Lippincott"
		"Archie Tse" -- "Haeyoun Park"
		"Archie Tse" -- "Alan McLean"
		"Archie Tse" -- "Graham Roberts"
		"Graham Roberts" -- "Haeyoun Park"
		"Graham Roberts" -- "Alan McLean"
		"Alan McLean" -- "Haeyoun Park"
		"A. L. Vaughan" -- "C. H. Epps"
		"A. L. Vaughan" -- "D. G. Johnson"
		"D. G. Johnson" -- "C. H. Epps"
		"Andrea Scharnhorst" -- "Almila Akdag Salah"
		"Andrea Scharnhorst" -- "Cheng Gao"
		"Andrea Scharnhorst" -- "Krzysztof Suchecki"
		"Krzysztof Suchecki" -- "Almila Akdag Salah"
		"Krzysztof Suchecki" -- "Cheng Gao"
		"Cheng Gao" -- "Almila Akdag Salah"
		"Giorgio Tavano Blessi" -- "Pierluigi Sacco"
		"Giorgio Tavano Blessi" -- "Guido Ferilli"
		"Guido Ferilli" -- "Pierluigi Sacco"
		"Amy Bruckman" -- "Andrea Forte"
		"Amy Bruckman" -- "Vanessa Larco"
		"Vanessa Larco" -- "Andrea Forte"
		"Maria Pia Di Bella" -- "James Elkins"
		"Maria Pia Di Bella" -- "James Elkins"
		"James Elkins" -- "James Elkins"
		"James R. Allison" -- "Richard H. Wilshusen"
		"James R. Allison" -- "Gregson Schachner"
		"Gregson Schachner" -- "Richard H. Wilshusen"
		" Wagner, Gert G." -- "Adrian Duşa"
		" Wagner, Gert G." -- "Dietrich Nelle"
		" Wagner, Gert G." -- "Günter Stock"
		"Günter Stock" -- "Adrian Duşa"
		"Günter Stock" -- "Dietrich Nelle"
		"Dietrich Nelle" -- "Adrian Duşa"
		" Bibliothèque nationale (France). Éditeur scientifique" -- "Léopold Delisle"
		"Alex Garnett" -- "Ray Siemens"
		"Alex Garnett" -- "Meagan Timney"
		"Alex Garnett" -- "Cara Leitch"
		"Alex Garnett" -- "Corina Koolen"
		"Corina Koolen" -- "Ray Siemens"
		"Corina Koolen" -- "Meagan Timney"
		"Corina Koolen" -- "Cara Leitch"
		"Cara Leitch" -- "Ray Siemens"
		"Cara Leitch" -- "Meagan Timney"
		"Meagan Timney" -- "Ray Siemens"
		"Roy Rosenzweig" -- "Daniel J. Cohen"
		"S. B. Adonʹeva" -- "Laura J. Olson"
		"Bishop, A. P. et al." -- "Marchionini, G., Plaisant, C., & Komlodi, A."
		"G. Roncaglia" -- "F. Ciotti"
		"Alan MacEachern" -- "William J. Turkel"
		"Matthew Loy" -- "Nancy Maron"
		"Matthew Loy" -- "K. Kirby Smith"
		"K. Kirby Smith" -- "Nancy Maron"
		"John Unsworth" -- "William G. Thomas"
		"John Unsworth" -- "Susan Schreibman"
		"John Unsworth" -- "Ray Siemens"
		"Ray Siemens" -- "William G. Thomas"
		"Ray Siemens" -- "Susan Schreibman"
		"Susan Schreibman" -- "William G. Thomas"
		"Jeffrey Robinson" -- "Jerome Rothenberg"
		"F. Tomasi" -- "T. Numerico"
		"F. Tomasi" -- "D. Fiormonte"
		"D. Fiormonte" -- "T. Numerico"
		"Roy Rosenzweig" -- "Michael O'Malley"
		"Dursun Delen" -- "Gary Miner"
		"Dursun Delen" -- "John Elder IV"
		"Dursun Delen" -- "Thomas Hill"
		"Dursun Delen" -- "Robert Nisbet"
		"Robert Nisbet" -- "Gary Miner"
		"Robert Nisbet" -- "John Elder IV"
		"Robert Nisbet" -- "Thomas Hill"
		"Thomas Hill" -- "Gary Miner"
		"Thomas Hill" -- "John Elder IV"
		"John Elder IV" -- "Gary Miner"
		"Katie Shilton" -- "Lilly Nguyen"
		"B. Gennaro" -- "J.D. Bolter"
		"B. Gennaro" -- "R. Grusin"
		"B. Gennaro" -- "A. Marinelli"
		"A. Marinelli" -- "J.D. Bolter"
		"A. Marinelli" -- "R. Grusin"
		"R. Grusin" -- "J.D. Bolter"
		" Demand" -- "Fabio Ciracì"
		"F. Ciotti" -- "G. Gigliozzi"
		"V. Marangi" -- "R. Baroncelli"
		"John M. Unsworth" -- "Susan Schreibman"
		"John M. Unsworth" -- "Raymond George Siemens"
		"Raymond George Siemens" -- "Susan Schreibman"
		"Jo Walsh" -- "Schuyler Erle"
		"Jo Walsh" -- "Rich Gibson"
		"Rich Gibson" -- "Schuyler Erle"
		"Seb Chan" -- "Susan Cairns"
		"John Unsworth" -- "Susan Hockey"
		"John Unsworth" -- "Susan Schreibman"
		"John Unsworth" -- "Ray Siemens"
		"Ray Siemens" -- "Susan Hockey"
		"Ray Siemens" -- "Susan Schreibman"
		"Susan Schreibman" -- "Susan Hockey"
		"George Michalopoulos" -- "Kenneth Dyson"
		"George Michalopoulos" -- "Kevin Featherstone"
		"Kevin Featherstone" -- "Kenneth Dyson"
		"W. R Trask" -- "M. Eliade"
		"Matthew J. L. Connolly" -- " Davis, Philip M."
		"William J. Turkel" -- "Daniel J. Cohen"
		"William J. Turkel" -- "Michael Frisch"
		"William J. Turkel" -- "Patrick Gallagher"
		"William J. Turkel" -- "Steve Mintz"
		"William J. Turkel" -- "Kirsten Sword"
		"William J. Turkel" -- "Amy Murrell Taylor"
		"William J. Turkel" -- "William G. III Thomas"
		"William G. III Thomas" -- "Daniel J. Cohen"
		"William G. III Thomas" -- "Michael Frisch"
		"William G. III Thomas" -- "Patrick Gallagher"
		"William G. III Thomas" -- "Steve Mintz"
		"William G. III Thomas" -- "Kirsten Sword"
		"William G. III Thomas" -- "Amy Murrell Taylor"
		"Amy Murrell Taylor" -- "Daniel J. Cohen"
		"Amy Murrell Taylor" -- "Michael Frisch"
		"Amy Murrell Taylor" -- "Patrick Gallagher"
		"Amy Murrell Taylor" -- "Steve Mintz"
		"Amy Murrell Taylor" -- "Kirsten Sword"
		"Kirsten Sword" -- "Daniel J. Cohen"
		"Kirsten Sword" -- "Michael Frisch"
		"Kirsten Sword" -- "Patrick Gallagher"
		"Kirsten Sword" -- "Steve Mintz"
		"Steve Mintz" -- "Daniel J. Cohen"
		"Steve Mintz" -- "Michael Frisch"
		"Steve Mintz" -- "Patrick Gallagher"
		"Patrick Gallagher" -- "Daniel J. Cohen"
		"Patrick Gallagher" -- "Michael Frisch"
		"Michael Frisch" -- "Daniel J. Cohen"
		"Edward L. Ayers" -- "William G. Thomas"
		"Roy Rosenzweig" -- "Michael O'Malley"
		"Dave Weissman" -- "Raymond Lo"
		"Dave Weissman" -- "Guhan Viswanathan"
		"Guhan Viswanathan" -- "Raymond Lo"
}


%3 Susana Pajares Tosca Susana Pajares Tosca Simon Egenfeldt-Nielsen Simon Egenfeldt-Nielsen Susana Pajares Tosca--Simon Egenfeldt-Nielsen Jonas Heide Smith Jonas Heide Smith Susana Pajares Tosca--Jonas Heide Smith Jonas Heide Smith--Simon Egenfeldt-Nielsen Xingcan Chen Xingcan Chen Li Liu Li Liu Xingcan Chen--Li Liu Association des arche��ologues du Que��bec Association des arche��ologues du Que��bec Claude Chapdelaine Claude Chapdelaine Association des arche��ologues du Que��bec--Claude Chapdelaine Olivia Rohan Olivia Rohan Mike Cosgrave Mike Cosgrave Olivia Rohan--Mike Cosgrave Anna Dowling Anna Dowling Olivia Rohan--Anna Dowling Lynn Harding Lynn Harding Olivia Rohan--Lynn Harding R��is��n O'Brien R��is��n O'Brien Olivia Rohan--R��is��n O'Brien Anna Dowling--Mike Cosgrave Lynn Harding--Mike Cosgrave Lynn Harding--Anna Dowling R��is��n O'Brien--Mike Cosgrave R��is��n O'Brien--Anna Dowling R��is��n O'Brien--Lynn Harding Roy Rosenzweig Roy Rosenzweig Daniel J Cohen Daniel J Cohen Roy Rosenzweig--Daniel J Cohen Daniel J. Cohen Daniel J. Cohen Roy Rosenzweig--Daniel J. Cohen Roy Rosenzweig--Daniel J. Cohen Michael O'Malley Michael O'Malley Roy Rosenzweig--Michael O'Malley Roy Rosenzweig--Michael O'Malley S��a��ntaraks��ita S��a��ntaraks��ita Luis O Go��mez Luis O Go��mez S��a��ntaraks��ita--Luis O Go��mez Syd Bauman Syd Bauman C. M Sperberg-McQueen C. M Sperberg-McQueen Syd Bauman--C. M Sperberg-McQueen Lou Burnard Lou Burnard Syd Bauman--Lou Burnard Lou Burnard--Syd Bauman Lou Burnard--C. M Sperberg-McQueen Lou Burnard--C. M Sperberg-McQueen @foundhistory @foundhistory Tom Scheinfeldt Tom Scheinfeldt @foundhistory--Tom Scheinfeldt F. N. Robinson F. N. Robinson Geoffrey Chaucer Geoffrey Chaucer F. N. Robinson--Geoffrey Chaucer Larry Benson Larry Benson F. N. Robinson--Larry Benson Robert Pratt Robert Pratt F. N. Robinson--Robert Pratt Larry Benson--Geoffrey Chaucer Robert Pratt--Geoffrey Chaucer Robert Pratt--Larry Benson Thomas C. Stillinger Thomas C. Stillinger Elizabeth Fowler Elizabeth Fowler Thomas C. Stillinger--Elizabeth Fowler Christian K. Zacher Christian K. Zacher R. W. Hanning R. W. Hanning Christian K. Zacher--R. W. Hanning James McMurrin Dean James McMurrin Dean Christian K. Zacher--James McMurrin Dean James McMurrin Dean--R. W. Hanning Liam Frink Liam Frink Maxine Oland Maxine Oland Liam Frink--Maxine Oland Siobhan M. Hart Siobhan M. Hart Liam Frink--Siobhan M. Hart Siobhan M. Hart--Maxine Oland Joan Griffin Joan Griffin Michelle van Ryn Michelle van Ryn Joan Griffin--Michelle van Ryn Diana Burgess Diana Burgess Joan Griffin--Diana Burgess Jennifer Malat Jennifer Malat Joan Griffin--Jennifer Malat Diana Burgess--Michelle van Ryn Jennifer Malat--Michelle van Ryn Jennifer Malat--Diana Burgess R. Grusin R. Grusin J.D. Bolter J.D. Bolter R. Grusin--J.D. Bolter R. Grusin--J.D. Bolter Tara McPherson Tara McPherson Steve Anderson Steve Anderson Tara McPherson--Steve Anderson Keith Johnson Keith Johnson Richard Anderson Richard Anderson Keith Johnson--Richard Anderson Hannah Frost Hannah Frost Keith Johnson--Hannah Frost Nancy Hoebelheinrich Nancy Hoebelheinrich Keith Johnson--Nancy Hoebelheinrich Hannah Frost--Richard Anderson Nancy Hoebelheinrich--Richard Anderson Nancy Hoebelheinrich--Hannah Frost Frank McCown Frank McCown Michael L. Nelson Michael L. Nelson Frank McCown--Michael L. Nelson Catherine C Marshall Catherine C Marshall Frank McCown--Catherine C Marshall Michael L. Nelson--Frank McCown Joan A. Smith Joan A. Smith Michael L. Nelson--Joan A. Smith Catherine C Marshall--Michael L. Nelson Noah Vawter Noah Vawter Nick Montfort Nick Montfort Noah Vawter--Nick Montfort Patsy Baudoin Patsy Baudoin Noah Vawter--Patsy Baudoin John Bell John Bell Noah Vawter--John Bell Ian Bogost Ian Bogost Noah Vawter--Ian Bogost Jeremy Douglass Jeremy Douglass Noah Vawter--Jeremy Douglass Mark C. Marino Mark C. Marino Noah Vawter--Mark C. Marino Michael Mateas Michael Mateas Noah Vawter--Michael Mateas Casey Reas Casey Reas Noah Vawter--Casey Reas Mark Sample Mark Sample Noah Vawter--Mark Sample Patsy Baudoin--Nick Montfort John Bell--Nick Montfort John Bell--Patsy Baudoin Ian Bogost--Nick Montfort Ian Bogost--Patsy Baudoin Ian Bogost--John Bell Jeremy Douglass--Nick Montfort Jeremy Douglass--Patsy Baudoin Jeremy Douglass--John Bell Jeremy Douglass--Ian Bogost Mark C. Marino--Nick Montfort Mark C. Marino--Patsy Baudoin Mark C. Marino--John Bell Mark C. Marino--Ian Bogost Mark C. Marino--Jeremy Douglass Michael Mateas--Nick Montfort Michael Mateas--Patsy Baudoin Michael Mateas--John Bell Michael Mateas--Ian Bogost Michael Mateas--Jeremy Douglass Michael Mateas--Mark C. Marino Casey Reas--Nick Montfort Casey Reas--Patsy Baudoin Casey Reas--John Bell Casey Reas--Ian Bogost Casey Reas--Jeremy Douglass Casey Reas--Mark C. Marino Casey Reas--Michael Mateas Mark Sample--Nick Montfort Mark Sample--Patsy Baudoin Mark Sample--John Bell Mark Sample--Ian Bogost Mark Sample--Jeremy Douglass Mark Sample--Mark C. Marino Mark Sample--Michael Mateas Mark Sample--Casey Reas Los Alamos National Library Los Alamos National Library Old Dominion University Old Dominion University Los Alamos National Library-- Old Dominion University Christopher A. Pool Christopher A. Pool Deborah L. Nichols Deborah L. Nichols Christopher A. Pool--Deborah L. Nichols University of California Press University of California Press Jerome Rothenberg Jerome Rothenberg University of California Press--Jerome Rothenberg Pierre Joris Pierre Joris University of California Press--Pierre Joris University of California (System) University of California (System) University of California Press--University of California (System) Pierre Joris--Jerome Rothenberg University of California (System)--Jerome Rothenberg University of California (System)--Pierre Joris Joan A. Smith--Frank McCown Jiawei Han Jiawei Han Harvey J. Miller Harvey J. Miller Jiawei Han--Harvey J. Miller Jeanne Hamming Jeanne Hamming Helen J. Burgess Helen J. Burgess Jeanne Hamming--Helen J. Burgess Andrew Kenyon Andrew Kenyon Peter Hirtle Peter Hirtle Andrew Kenyon--Peter Hirtle Emily Hudson Emily Hudson Andrew Kenyon--Emily Hudson Emily Hudson--Peter Hirtle Jerome J. McGann Jerome J. McGann James Soderholm James Soderholm Jerome J. McGann--James Soderholm Nate Schweber Nate Schweber Al Baker Al Baker Nate Schweber--Al Baker Diane Goldenberg-Hart Diane Goldenberg-Hart Joan K. Lippincott Joan K. Lippincott Diane Goldenberg-Hart--Joan K. Lippincott Archie Tse Archie Tse Haeyoun Park Haeyoun Park Archie Tse--Haeyoun Park Alan McLean Alan McLean Archie Tse--Alan McLean Graham Roberts Graham Roberts Archie Tse--Graham Roberts Alan McLean--Haeyoun Park Graham Roberts--Haeyoun Park Graham Roberts--Alan McLean A. L. Vaughan A. L. Vaughan C. H. Epps C. H. Epps A. L. Vaughan--C. H. Epps D. G. Johnson D. G. Johnson A. L. Vaughan--D. G. Johnson D. G. Johnson--C. H. Epps Andrea Scharnhorst Andrea Scharnhorst Almila Akdag Salah Almila Akdag Salah Andrea Scharnhorst--Almila Akdag Salah Cheng Gao Cheng Gao Andrea Scharnhorst--Cheng Gao Krzysztof Suchecki Krzysztof Suchecki Andrea Scharnhorst--Krzysztof Suchecki Cheng Gao--Almila Akdag Salah Krzysztof Suchecki--Almila Akdag Salah Krzysztof Suchecki--Cheng Gao Giorgio Tavano Blessi Giorgio Tavano Blessi Pierluigi Sacco Pierluigi Sacco Giorgio Tavano Blessi--Pierluigi Sacco Guido Ferilli Guido Ferilli Giorgio Tavano Blessi--Guido Ferilli Guido Ferilli--Pierluigi Sacco Amy Bruckman Amy Bruckman Andrea Forte Andrea Forte Amy Bruckman--Andrea Forte Vanessa Larco Vanessa Larco Amy Bruckman--Vanessa Larco Vanessa Larco--Andrea Forte Maria Pia Di Bella Maria Pia Di Bella James Elkins James Elkins Maria Pia Di Bella--James Elkins Maria Pia Di Bella--James Elkins James Elkins--James Elkins James R. Allison James R. Allison Richard H. Wilshusen Richard H. Wilshusen James R. Allison--Richard H. Wilshusen Gregson Schachner Gregson Schachner James R. Allison--Gregson Schachner Gregson Schachner--Richard H. Wilshusen Wagner, Gert G. Wagner, Gert G. Adrian Du��a Adrian Du��a Wagner, Gert G.--Adrian Du��a Dietrich Nelle Dietrich Nelle Wagner, Gert G.--Dietrich Nelle G��nter Stock G��nter Stock Wagner, Gert G.--G��nter Stock Dietrich Nelle--Adrian Du��a G��nter Stock--Adrian Du��a G��nter Stock--Dietrich Nelle Biblioth��que nationale (France). ��diteur scientifique Biblioth��que nationale (France). ��diteur scientifique L��opold Delisle L��opold Delisle Biblioth��que nationale (France). ��diteur scientifique--L��opold Delisle Alex Garnett Alex Garnett Ray Siemens Ray Siemens Alex Garnett--Ray Siemens Meagan Timney Meagan Timney Alex Garnett--Meagan Timney Cara Leitch Cara Leitch Alex Garnett--Cara Leitch Corina Koolen Corina Koolen Alex Garnett--Corina Koolen William G. Thomas William G. Thomas Ray Siemens--William G. Thomas Susan Schreibman Susan Schreibman Ray Siemens--Susan Schreibman Ray Siemens--Susan Schreibman Susan Hockey Susan Hockey Ray Siemens--Susan Hockey Meagan Timney--Ray Siemens Cara Leitch--Ray Siemens Cara Leitch--Meagan Timney Corina Koolen--Ray Siemens Corina Koolen--Meagan Timney Corina Koolen--Cara Leitch S. B. Adon��eva S. B. Adon��eva Laura J. Olson Laura J. Olson S. B. Adon��eva--Laura J. Olson Bishop, A. P. et al. Bishop, A. P. et al. Marchionini, G., Plaisant, C., & Komlodi, A. Marchionini, G., Plaisant, C., & Komlodi, A. Bishop, A. P. et al.--Marchionini, G., Plaisant, C., & Komlodi, A. G. Roncaglia G. Roncaglia F. Ciotti F. Ciotti G. Roncaglia--F. Ciotti G. Gigliozzi G. Gigliozzi F. Ciotti--G. Gigliozzi Alan MacEachern Alan MacEachern William J. Turkel William J. Turkel Alan MacEachern--William J. Turkel William J. Turkel--Daniel J. Cohen Michael Frisch Michael Frisch William J. Turkel--Michael Frisch Patrick Gallagher Patrick Gallagher William J. Turkel--Patrick Gallagher Steve Mintz Steve Mintz William J. Turkel--Steve Mintz Kirsten Sword Kirsten Sword William J. Turkel--Kirsten Sword Amy Murrell Taylor Amy Murrell Taylor William J. Turkel--Amy Murrell Taylor William G. III Thomas William G. III Thomas William J. Turkel--William G. III Thomas Matthew Loy Matthew Loy Nancy Maron Nancy Maron Matthew Loy--Nancy Maron K. Kirby Smith K. Kirby Smith Matthew Loy--K. Kirby Smith K. Kirby Smith--Nancy Maron John Unsworth John Unsworth John Unsworth--Ray Siemens John Unsworth--Ray Siemens John Unsworth--William G. Thomas John Unsworth--Susan Schreibman John Unsworth--Susan Schreibman John Unsworth--Susan Hockey Susan Schreibman--William G. Thomas Susan Schreibman--Susan Hockey Jeffrey Robinson Jeffrey Robinson Jeffrey Robinson--Jerome Rothenberg F. Tomasi F. Tomasi T. Numerico T. Numerico F. Tomasi--T. Numerico D. Fiormonte D. Fiormonte F. Tomasi--D. Fiormonte D. Fiormonte--T. Numerico Dursun Delen Dursun Delen Gary Miner Gary Miner Dursun Delen--Gary Miner John Elder IV John Elder IV Dursun Delen--John Elder IV Thomas Hill Thomas Hill Dursun Delen--Thomas Hill Robert Nisbet Robert Nisbet Dursun Delen--Robert Nisbet John Elder IV--Gary Miner Thomas Hill--Gary Miner Thomas Hill--John Elder IV Robert Nisbet--Gary Miner Robert Nisbet--John Elder IV Robert Nisbet--Thomas Hill Katie Shilton Katie Shilton Lilly Nguyen Lilly Nguyen Katie Shilton--Lilly Nguyen B. Gennaro B. Gennaro B. Gennaro--R. Grusin B. Gennaro--J.D. Bolter A. Marinelli A. Marinelli B. Gennaro--A. Marinelli A. Marinelli--R. Grusin A. Marinelli--J.D. Bolter Demand Demand Fabio Cirac�� Fabio Cirac�� Demand--Fabio Cirac�� V. Marangi V. Marangi R. Baroncelli R. Baroncelli V. Marangi--R. Baroncelli John M. Unsworth John M. Unsworth John M. Unsworth--Susan Schreibman Raymond George Siemens Raymond George Siemens John M. Unsworth--Raymond George Siemens Raymond George Siemens--Susan Schreibman Jo Walsh Jo Walsh Schuyler Erle Schuyler Erle Jo Walsh--Schuyler Erle Rich Gibson Rich Gibson Jo Walsh--Rich Gibson Rich Gibson--Schuyler Erle Seb Chan Seb Chan Susan Cairns Susan Cairns Seb Chan--Susan Cairns George Michalopoulos George Michalopoulos Kenneth Dyson Kenneth Dyson George Michalopoulos--Kenneth Dyson Kevin Featherstone Kevin Featherstone George Michalopoulos--Kevin Featherstone Kevin Featherstone--Kenneth Dyson W. R Trask W. R Trask M. Eliade M. Eliade W. R Trask--M. Eliade Matthew J. L. Connolly Matthew J. L. Connolly Davis, Philip M. Davis, Philip M. Matthew J. L. Connolly-- Davis, Philip M. Michael Frisch--Daniel J. Cohen Patrick Gallagher--Daniel J. Cohen Patrick Gallagher--Michael Frisch Steve Mintz--Daniel J. Cohen Steve Mintz--Michael Frisch Steve Mintz--Patrick Gallagher Kirsten Sword--Daniel J. Cohen Kirsten Sword--Michael Frisch Kirsten Sword--Patrick Gallagher Kirsten Sword--Steve Mintz Amy Murrell Taylor--Daniel J. Cohen Amy Murrell Taylor--Michael Frisch Amy Murrell Taylor--Patrick Gallagher Amy Murrell Taylor--Steve Mintz Amy Murrell Taylor--Kirsten Sword William G. III Thomas--Daniel J. Cohen William G. III Thomas--Michael Frisch William G. III Thomas--Patrick Gallagher William G. III Thomas--Steve Mintz William G. III Thomas--Kirsten Sword William G. III Thomas--Amy Murrell Taylor Edward L. Ayers Edward L. Ayers Edward L. Ayers--William G. Thomas Dave Weissman Dave Weissman Raymond Lo Raymond Lo Dave Weissman--Raymond Lo Guhan Viswanathan Guhan Viswanathan Dave Weissman--Guhan Viswanathan Guhan Viswanathan--Raymond Lo