I saw a post on Reddit (https://www.reddit.com/r/math/comments/ci50d3/visualizing_mathematical_subjects/) that utilizes label propagation, Fruchterman-Reingold algorithm, and edge betweenness clustering to classify mathematical subjects based on papers in 2018 on arxiv.org.

In a math book, definitions and theorems are often numbered. We can create a directed graph by using these numbers as nodes. If number A is referenced in the proof of number B, an arrow is drawn from A to B. The resulting directed graph represents the logical relationship (or understanding order) between these numbers. This graph can then be arranged as tree. The first layer usually will have the most nodes, but the nodes in the later layers are more likely to be the focus of an exam or be a book's main results. I think this graph has the following advantages:

  1. Knowing the general structure of the book before reading
  2. Easily allocating attention while reading, such as focusing on the current key number and ignoring non-essential (logical) relationships
  3. Quickly finding numbers that were not fully understood, memorized when encountering a difficult number
  4. Reading in reverse order, starting from the last few layers and reading backwards, which naturally engages more attention on the last few layers layers. So perhaps achieve the attention mode of the review stage after reading or when doing practice problems at the very beginning.

To draw the arrows between numbers, instead of manually searching for each number using ctrl+F in the PDF, it should also be possible to directly search for all numbers or keywords in the text and convert the order of numbers in the text to the graph, since if number A appears again between number B and C, it is likely that it is referenced in the proof of number B. It's worth noting that some math books number definitions and theorem separately, while others number them all together.

I have searched for pre-existing graph tools on the internet but have not found any that fit my needs. My questions are :

  1. Are there any programming books that cover the implementation of algorithms such as label propagation, Fruchterman-Reingold, edge betweenness clustering, converting directed graphs to tree graphs, or other advanced graph algorithms? I'm a math back ground student, have basic knowledge of Python.
  2. How can I retrieve all specified keywords in a PDF and generate their appearing order in the PDF?

Here is an example I created for a math lecture notes, of a course I take this year, using https://csacademy.com/app/graph_editor/, I did it manually as I described above. enter image description here enter image description here

  • $\begingroup$ I am not sure if I understand what you are asking, but it sounds like you are asking how to learn to program. That is beyond the scope of this site, but you can find many online courses that will teach you programming. $\endgroup$
    – D.W.
    Jan 20 at 21:06
  • 1
    $\begingroup$ So, you want to automatically represent a math text-book as a digraph, right? It looks like this idea is related to data mining and knowledge representation (tags updated). You might get more relevant answers on this site: datascience.stackexchange.com $\endgroup$
    – HEKTO
    Jan 21 at 17:23

1 Answer 1


For question 1, I suggest that you start with basic programming courses. If you understand how to program, and you understand the specific algorithms you are referring to, you should be able to implement them. You should not need a specific course or textbook that is specifically on implementing those particular algorithms. There are many online resources for learning to program. You might start with a data structures course and an algorithms course.

Question 2 is off-topic here, as coding questions are outside of the scope of this site.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Not the answer you're looking for? Browse other questions tagged or ask your own question.