Back to portfolio

PubXtractor

1 / 4

The project

Our project aims to help medical researchers by providing a supporting tool for searching relevant information in scientific literature. It looks like a standard search engine for scientific papers. It extracts structured attribute information from unstructured scientific articles available on PubMed. Instead of classic paper skimming and reading, the researcher can look for retrieved attributes (such as treatment outcomes or sample sizes) to quickly find the medical information variables they are looking for and discover better insights based on the retrieved papers. Our research-supporting tool is based on AI retrieval and metadata extraction. The relevant papers are identified based on a user’s natural-language query. Our workflow starts by sending a request to the PubMed API. This API retrieves papers relevant to the user’s query. Next, the LangExtract library is used to extract the desired metadata attributes from those papers. For each paper, the metadata is shown to the user in tabular form. Our product can save countless hours of work for medical researchers who look for relevant information on PubMed. The researcher sees a set of attributes retrieved from papers relevant to their query using LLMs and scraping. This tool reduces the time needed to search medical papers.

In a six-person software team, code is only part of the job; communication, planning, and documentation often take more effort because every contribution depends on someone else's work.

The customer

Our clients were Kiana Shahrasbi (a PhD candidate at the Translational Data Science & AI Lab) and Armel Lefebvre (Senior Researcher at Leiden University Medical Center). Communication with our client was professional, focused on product direction and feedback, rather than day-to-day management. We reported our progress via bi-weekly emails and flexible on-site meetings every second Wednesday, where we were refining the scope, success criteria, and constraints of the project. We received responses in a reasonable time frame, and the clients provided helpful guidelines and understanding related to technical obstacles we encountered, such as LLM token usage. However, our team did not send numerous emails because there was no significant weekly progress to report. Besides that, we were honest in our communication about progress made using LLMs, APIs, and demos. Our clients were easily reachable, detailed, and constructive in terms of what was expected from us.

The best products are built through partnership. Together with our clients, we steered the web application toward their vision.

The team

Our cross-functional team consisted of 1 Scrum master, 1 product owner, and 4 software developers. Although different team members had to accomplish different tasks, everyone contributed to the frontend and backend of our web app. At the beginning, we worked together as a team to brainstorm and research project ideas. After each client meeting, we were dividing tasks for a new sprint in a Scrum framework. We got familiar with available tools and resources, such as BioPython and PubMed. While the project progressed, we started separating the work into each other’s SCRUM tasks, such as metadata extraction, FastAPI setup, LangExtract configuration, robust database creation, or testing. The main challenges our team overcame were retrieving relevant information from papers that do not follow any structure and do not consider any formatting standards. It also involved time required to analyze the entire paper by LLMs. The challenge was to find a Pareto frontier between computational costs, token usage, inference time, and accuracy. As a team, we are proud of successfully bringing the project to an end where, as a team, we accomplished all tasks from our backlog. We built a successful proof-of-concept medical web app while managing a 6-person team and made our clients satisfied with the results, even though we did not have a medical background. Even though we all followed the same program (DSAI), we complemented each other’s skills and we could learn from each other.

I will complete my Scrum task by Friday afternoon.

The technologies

Languages:

  • HTML, CSS: frontend of the application, appearance of the website
  • Python: backend of the application, running the PubXtractor pipeline to retrieve results for the user

Important frameworks and libraries:

  • LangExtract – retrieving structured information from unstructured text (medical papers available on PubMed)
  • Uvicorn – a web server our website runs on; it serves the HTML address after launching a server
  • Docker – a virtual instance container used to build our website and generate a static version of the website (used in CI)
  • FastAPI – used to retrieve papers from PubMed and metadata

Tooling:

  • Ruff: linting and formatting of Python code (also used in CI) to improve clarity among team members
  • Pylint: static code analysis (also used in CI), providing suggestions for code refactoring
  • pytest: automated testing of different components such as scraping and paper retrieval
  • Jekyll – static generation of our website to ensure a commit does not break the deployable website (also used in CI)

Deployment:

  • Our site creates a deployable artifact served on a Uvicorn server.