Computer Laboratory

Yiannos A. Stathopoulos

I am a researcher at the University of Cambridge, Department of Computer Science and Technology working on the ALEXANDRIA project. My work on the ALEXANDRIA project revolves around user-support tools and methods, based on AI and machine learning, for the interactive theorem prover (ITP) Isabelle.

I have the privillage of collaborating with Dr Alexis Litvine and Dr Oliver Dunn on the THOTH project. THOTH is an initiative within Cambridge University to apply AI and machine learning in the humanities and social sciences. Presently, we are working on automatic extraction of cell data from tables in historical documents.

My background is in Information Retrieval (i.e., search), Artificial Intelligence, Machine Learning, Computer Vision and Natural Language Processing (NLP)

I have previously worked on extracting and parsing mathematical expressions directly from PDF documents. As part of this work, supervised by Dr Brian Harrington, I have:

  • Built tools that extract text box, text line and character data from PDFs and produce machine-readable XML representations of page data. I modified pdftotext to align data in PDF documents with rasterised pages in PDF documents.
  • Built Mathalyzer, an interactive machine learning annotation and exploratory tool for automaticall extracting and parsing mathematical expressions from PDF documents (see below).
  • Obtained extensive experience working with computer vision algorithms and the OpenCV library (in C++ and Python).

My PhD was on Mathematical Information Retrieval (MIR) of research mathematics under the supervision of Dr. Simone Teufel.


  • BSc in Computer Science, First class -- University of Nottingham
  • MSc in Statistics -- University of Nottingham
  • MSc in Computer Science -- University of Oxford
  • PhD in Computer Science -- University of Cambridge






Code and Data Downloads

  • Download the Cambridge University MathIR Test Collection (for retrieval of research-level mathematics) described in
    "Retrieval of research-level mathematical information needs: A Test Collection and Technical Terminology Experiment"
  • Download the Cambridge Dictionary of Mathematical Types (CDMT) seed type dictionary (10601 phrases), gold-standard data set for type detection from "Mathematical Information Retrieval Based on Type Embeddings and Query Expansion" and extended type dictionary (1.23m phrases) from "Variable Typing: Assigning Meaning to Variables in Mathematical Text"
  • Download the Variable Typing Data Set for assigning meaning to mathematical variables using Machine Learning

Cool things I've built

This is a partial list of cool stuff I've built.

  • Mathalyzer -- an interactive tool for analysing mathematical formuale in PDF documents. Written in C++ and GTK+, this tool employs the Presentation-Abstraction-Control (PAC) pattern to synchronise multiple data elements in a unified presentation. The idea behind Mathalyzer is to produce a tool that combines elements of Acrobat, Photoshop and SPSS.

  • Spine -- A small C++ library, forked from the subsystems of Mathalyzer, that implements Presentation-Abstraction-Control (PAC) message passing with GTK+ controls. This library is used to synchronise the data-model of GUI apps, with various independent GUI elements implemented in GTK+.
  • Interval and range trees -- A small C++ library of interval and range trees for optimising the Mathalyzer canvas. My implementation of interval and range trees is built on top of Red-black trees. Upon rotation, the R-B tree implementation raises a rotation event. Event handlers at higher levels are responsible for applying transformations that re-establish the invariants of the interval and range trees.
  • OMEX -- Software that detects and extracts mathematical expressions from PDF. The pipeline is the subject of my paper with Dr. Brian Harrington. Mathalyzer was built to extend aspects of this pipeline with machine learning.
  • MapReduce in C++ -- I built a small C++ implementation of Google's MapReduce. The implementation is designed to abstract parallelisation of tasks using Mappers, Grouppers and Reducers on multi-core systems.