# Determine the most and least connected book

I'm moving this discussion from Sascha's thread "Graph view with older Zettelkastens" so as not to spoil their fun, and we can run on off-topic.

@r1tger said over on another post:

@Will said:
Why have you settled on incoming links as the indicator for note ranking? What about considering outbound links, the number of tags, or the number of links to structure notes?

Mainly pragmatism :-). I figure that if I reference a note a lot in other notes, the information in the note being referenced is "more valuable", since I keep coming back to it. I don't do tagging, and structure notes are a later addition to my Zettelkasten, and are treated as regular notes, but with a lot of outgoing links. So those two are out too. Does either of those help you in using your Zettelkasten? I'm always looking to improve this metric.

I completely understand the need for pragmatism. I tag most notes and sometimes use a tag in a search, for example, if I want to limit my search query to #coding or #ENGL463. I'm still waiting for the logic of tagging to light a fire in my ZK, and maybe it won't. I'm keeping an open mind. We'll see. I treat my structure notes much like you do, as regular notes.

Together, tags and structure notes don't help considerably, but they are indispensable with some questions. I'm starting to get a clue that my structure notes want me to give them more attention and love.

A weighted system would capture all the values of a particular zettel. For example, 1 point for each inbound and .75 for each outbound link, maybe .5 for each tag, and .25 for each link on a structure note. What do you think of this idea?

The zsh script I use for the output below is an early attempt but is sloooow. Here we are looking at a small sample of my top nine book notes and how well or not so well they are connected.

B-Quintessential Dzogchen 201901301240 - Total Links: 113 : (In 73 - Out 40) Score 103
B-Ecodharma 202007050647 - Total Links: 80 : (In 42 - Out 38)  Score 70.5
B-Meditations on Self-Discipline 201901021303 - Total Links: 78 : (In 45 - Out 33) Score 69.75
B-Rationality: From AI to Zombies 201910281639 - Total Links: 69 : (In 30 - Out 39) Score 59.25
B-Environmental And Nature Writing 202008061944 - Total Links: 62 : (In 13 - Out 49) Score 49.75
B-The Extended Mind 202203031429 - Total Links: 53 : (In 13 - Out 40) Score 43
B-The Zen Teaching of Huang-Po 201903141853 - Total Links: 52 : (In 8 - Out 44) Score 41
B-Techniques For Producing Ideas 202206251631 - Total Links: 51 : (In 26 - Out 25) Score 51.75
B-Haiku Book One 202001011457 - Total Links: 50 : (In 9 - Out 41) Score 39.75


I also use the incoming links metric to programmatically ask my Zettelkasten how to find the least number of related notes between two separate ideas, but that's getting off-topic.

This is intriguing. I'm not sure how you'd use this metric. Why would I want to know "the least number of related notes between two separate ideas?" Please tutor me.

Will Simpson
“Read Poetry, Listen to Good Music, and Get Exercise”
kestrelcreek.com

• @Will said:
Together, tags and structure notes don't help considerably, but they are indispensable with some questions. I'm starting to get a clue that my structure notes want me to give them more attention and love.

I'm still figuring out if I like structure notes. I really like linking notes to one another and being able to query that graph. I'm a bit limited in available time, so I'd rather not do manual maintenance on structure notes. Without structure notes I tend to focus on maintenance as part of adding and linking new notes, which I find more fun.

A weighted system would capture all the values of a particular zettel. For example, 1 point for each inbound and .75 for each outbound link, maybe .5 for each tag, and .25 for each link on a structure note. What do you think of this idea?

I like it, should be easy enough to implement. Excluding structure notes is important though, otherwise each lattice will always revolve around as many interconnected structure notes as the algorithm can possible find. However, such a rating is really just a very small starting point. How interesting a note is to me depends on what I'm doing with my Zettelkasten (explaining something, jog-my-memory, writing an article, preparing a presentation, etc.). That is practically impossible to express in just single number on a note. It's all imperfect, but every bit helps.

This is intriguing. I'm not sure how you'd use this metric. Why would I want to know "the least number of related notes between two separate ideas?" Please tutor me.

I talk too much :-). One of the things I really use my Zettelkasten for is preparing presentations. As part of my presentations I like include something surprising. This is where my Zettelkasten really shines. Being able to quickly see there's an indirect link between "Information Risk Management" and "Mise-en-place for Knowledge Workers" (the culinary practice) and having the least number of notes needed to get there is an awesome starting point to start exploring in/talking to my notes, without being overwhelmed by all available links. It gives me a broad outline for my presentation, with most of the ideas already available for further processing.

Also, finding the shortest path across weighted nodes is something that came standard in the graph library I'm using. So a win-win basically, since it was quick to build.

• NetworkX looks interesting. Python is my first language; I'll have to explore it to see if I can grasp what you suggest. Can you help me if I get stuck?

Yes, time is limited and time spent on building/refactoring structure notes takes away from the fun parts of zettelkasting.

• Giving neglected notes, love, and attention is always fun and rewarding. Some of my most rewarding interactions with my ZK have been refactoring old notes and finding connections with my current work. Rethinking these ideas and reminiscing brings warmth to my heart and excites my brain—a powerful spaced repetition learning opportunity.
• In the last couple of weeks, I glimpsed what I think is some of the magic of structure notes. I came to this via my rededication to refactoring notes in what I'd consider a poorly neglected condition. Giving structure notes the same love as I give individual zettel produces the same feelings. The question is, do I have the time to dedicate to this? From an opportunity cost perspective, loving on notes is where I should concentrate. It takes more time and cognitive energy to refactor a structure note properly than an atomic zettel.
• But I see the value in the exercise. A whole idea stream is looked at instead of one or two branches and put in order, mentally fitting it with current and past knowledge. Some of my structure notes are in great shape. Some are a mess. I have 75! Way too many. Some need combining, and a few have grown unwieldy.
• How to divide zettelkasting time?
• 50% input of new ideas
• 50% writing
• 50% refactoring of notes
• 50% investigating and interrogating
• 50% sharing experience with others
• 50% looking at workflow
• 50% refactoring structure notes

THERE IS NOT ENOUGH TIME AVAILABLE!

Will Simpson
“Read Poetry, Listen to Good Music, and Get Exercise”
kestrelcreek.com

• @Will said:
NetworkX looks interesting. Python is my first language; I'll have to explore it to see if I can grasp what you suggest. Can you help me if I get stuck?

Sure! Implementing NetworkX can be kinda rough. I think there's some examples to get started hidden in the documentation. The stuff that was harder to do for me were (in no particular order):

• Figuring out how to parse Markdown for links (there's another library for this!);
• Figuring out the various data structures returned by NetworkX. These can be poorly documented, requiring the help of a debugger or lots of pprint() statements;
• How to render my Markdown notes to HTML, so I can generate an entire web browser version of my Zettelkasten that only requires a browser and a place on the web to put the HTML files.

Not all of these may be interesting to you, but to get you started: my implementation is on Github. I don't think your Zettelkasten Markdown files are parseable by my script though, but having an example implementation that's a bit bigger than the NetworkX examples might be useful.

• How to divide zettelkasting time?
THERE IS NOT ENOUGH TIME AVAILABLE!

I completely agree. Only do what's fun :-).