Display a list of current note's outgoing unlinked mentions (candidate forward links)

Use case or problem

I want to see a list of notes related to the current note, even when I haven’t created links. Specifically, I want to see a list of notes whose titles are contained in the current note’s text.

For example, let’s say I am reading a note titled “MyNote” that mentions “epistemology” and “ontology”. And let’s say I’ve already created notes called “Epistemology” and “Ontology”. In other words, the notes “Epistemology” and “Ontology” are related to to “MyNote”. So, when I’m reading “MyNote”, I want to see a list of those related notes.

Proposed solution

We already have a list of incoming unlinked mentions in the backlinks pane, but I propose that we also have a list of “outgoing unlinked mentions.” (In other words, this would be a list of notes whose titles are contained in the current note’s text.)

Related feature requests

There is a related feature request to include an outgoing links pane, but that feature request is about actual links, rather than unlinked mentions.

I have also created a related feature request to have the option to display relations based on unlinked mentions in graph view.

15 Likes

Note that @ShaneNZ has recently discussed this idea in detail, including the idea of creating a plugin to address it.

To address ShaneNZ’s points:

If the user has a vault where a large number of commonly used nouns correspond to existing note titles, then the outgoing unlinked mentions feature might not be very useful, but I don’t think that, at least initially, it would be necessary to tweak the feature for that use case. The default would be for the feature to be off, and it would be up to the user to see if the feature is useful for a given vault.

Fair point. I’m not a developer, but it seems to me that, if the current “unlinked mentions” implementation can search through the content of all other notes, then it should be possible to search through the titles of all other notes for matches to the current note’s text. But I guess it would depend on how long the current note is.

True, but doesn’t that point apply to the existing “unlinked mentions” implementation as well? It seems like a more general problem, rather than something specific to the idea of outgoing unlinked mentions.

Interesting point. Again, this seems like a problem that is general to the idea of unlinked mentions. Perhaps the new aliases implementation provides a partial solution. At any rate, for my purposes, at least to begin with, I would only want to search for actual titles (and aliases). In other words, I simply want the current “unlinked mentions” feature in reverse.

Anyway, thanks for your deep thinking on this!

1 Like

+1
Coupled w/ the request to show outgoing links in the link pane, this feature would create parity in how Obsidian treats incoming and outgoing links. I’d argue that’s essential for an app dedicated to creating useful note networks.

I agree that the existing Unlinked Mentions feature provides an existence proof for at least one reasonable way of addressing the issues raised by @ShaneNZ. It’s not the only way. Those issues suggest possible improvements to Unlinked Mentions implementation, regardless of incoming or outgoing. There are, for instance, linguistics libraries that help with search term “relevance” and would rank a match for an uncommon substance word like ‘usability’ higher than a common adjective like ‘important’.

2 Likes

Woah, thanks the creation of the feature request, and for all the extra thoughts on my thoughts. Great way to refine things :slight_smile:

Agree, think it is a bit of an edge case. The use of aliases as topic keywords on a note would be something that would make this situation worse, but it’s really a try it and see point.

In a vault of 100 notes, the current unlinked mentions implementation is “find the name of the current note in the content every other note” ie. it’s 99 searches, 1 search per other file. For outgoing unlinked mentions, let’s assume that the note we’re working on is 10 words long and we’re checking against the 99 other note names:

  • 10 searches - each word in the current note content, checked against 99 note titles
  • 9 searches - every two consecutive words in the current note content, checked against 99 note titles
  • 8 searches - every three consecutive words in the current note content, checked against 99 titles
  • etc etc

That’s 55 searches for a 10 word note, ~5000 for a 100 word note. Note titles are typically shorter than content so it’s not quite as bad as it sounds, and you’d set an upper limit ie. only check for 10 word phrases etc, but it does scale up fast, especially if you’re trying to keep the list up to date as you’re typing.

Can’t quote your quotes of me in here, but you’re right - it is a general issue with unlinked mentions. You can hack it with aliases by making an alias of every word/short phrase in the note name that you care about - ie. a note called "Improved usability leads to better user acceptance and task performance " would have aliases of “usability”, “user acceptance”, “task performance”. I’m experimenting with doing this across my vault, but really I shouldn’t have to, it’s the kind of processing that computers are suited to, not people (that and I have enough notes to not want to go back and do it to all of them :slight_smile: )

For me personally, the partial match component of this is key in order to help me form connections that I would otherwise miss while writing, refactoring and editing a note. If it has to be a perfect word for word match ie. I’ve written the text in the note the same way I wrote a note title six months ago (either incoming or outgoing), then that’s of limited usefulness to me. I can always use the search pane, but that’s very manual and I’m retyping what’s already in the note. Being prompted via a list like we’re talking about that does give me partial matches, and also Small but big QoL: When linking a pre-existing word or phrase, display the note suggestion menu (which does give the partial match results but can’t be easily triggered on a specific piece of existing text) are the two key things. I’m sure others have different workflows and needs though :slight_smile:

1 Like

Would it be more efficient to reverse the algorithm? Search for the 99 different titles in the current note’s content. Then it’s always 99 searches for a title string, of just one note. So for N notes, it’s N-1 searches in one file.

The current unlinked mentions algorithm is actually more intensive than this because it’s N-1 searches (for one string) in N-1 files. The devs may be using caching to optimize this.

1 Like

I’m sure their’s caching and other optimisations in place to assist. And you’re right, it could be reversed that way, and then re-running the search as the user adds words if you want realtime updates - not too significant because again you’d cache things, and also just focus on where the change is being made in the note. Doing this in a fuzzy fashion is just an extra sophistication in the search step.

Workable, workable :slight_smile:

1 Like

The list will be useful for interconnecting existing notes. But for notes in creation process, the following approach would be more useful:

1 Like

Just to add: some time ago I have already opened a quite similar feature request:

Especially with a view to the difficulties @ShaneNZ and others have been discussing here, that might be a more useful solution? Because, if I understand correctly, the point here is to quickly discover some already existing related topics that are not (yet) directly linked.

Tags have the advantage that, when creating a note, I can flexibly decide under what broader topics I like to be reminded of that note in the future. If the unlinked outgoing mentions would use tags instead of words, that would solve the problem of possibly listing hundreds of notes where a certain word appears although this word might not be very relevant for the overall content of the note.

Thus, in a certain sense, tags are somehow like aliases for certain terms or topics.

Does that make sense to you, @lucasd?

1 Like

I only use tags as status or type indicators (#review, #draft, #notetoself, etc) as that’s the workflow that works for me, so doing this unfortunately wouldn’t help me out much. But that’s just me of course, YMMV.

More and more I think the value of this,I feel it’s “local to the cursor”. You’re writing or editing a note, and at that point of the note you want to know what else you’ve already written that is relevant/related (ideally via a really strong fuzzy match/search). Doing it across the whole text of the note I feel would be pretty cool to see as well, but it would be harder to work with in relation the immediate piece of text I happen to be working on.

Worth staying too that if you’re not writing in a ZK/atomic idea style, then this whole thing is either not useful, or useful in some other way that I have no idea about :slight_smile:

1 Like

Please consider adding an option that makes text that is a mention of another note clickable. This would allow the user to notice and navigate to mentions of other notes, and perhaps create wiki links if desired.

For example, consider the following note from one of my vaults:

Let’s suppose I have a note called “Vim”. Since the note mentions Vim, it would be great if the word “Vim” were subtly highlighted and clickable, so that the user could notice there’s a potential connection here. Then if desired the user could navigate to the mentioned note, or turn the mention into a link.

Thanks for considering my suggestion, and thanks for all your hard work on Obsidian!

Craig

5 Likes

You have that feature already: in the backlinks function, you’ll find a category “unlinked mentions” - if, like in your case, you have a note elswhere called “Vim” and the word “Vim” also appears in your active note, then the other note will be shown there. With one single click you can then directly link to it!

Have a look at this video, it explains the power of backlinks quite well!

I understood something different from this feature request: A note with an arbitrary title, e.g “Great tools for programmers” that mentions the phrase “Vim is life” should have an option to create a link for the word [[Vim]] if that file exists or that link is mentioned in other files.
Related to this: Connect new notes to existing notes when existing note titles are not just single words?

2 Likes

Thanks @argentum, you put it very well!

My request is actually the inverse of what @alltagsverstand suggested above: while viewing the mentioning note, show potential outbound mentions as inline links, much like links to not-yet-existing notes are shown now.

3 Likes

@ShaneNZ I found an example of this feature in another app today. Just judging from the screenshot, it’s not fuzzy search but does exact-matching to flag a potential link whenever you type a string that matches an existing note title. Still thinking of making a plugin for this?

See https://saga.so

Scroll down to “Connect knowledge automatically”. If I understand it correctly, when you’re typing a note and you mention the title of an existing note, Saga will automatically link it.

1 Like

Thanks, @dsteinbock, for mentioning Saga’s automatic linking. Now that my request has been combined with @Craig’s request, I think something like what he describes would be great, and could have some advantages over the list I proposed, although what he described is more nuanced than “automatic linking”. His proposal, if I understand correctly, is for the text in question to be highlighted in some way as a candidate link (which would itself be clickable), with the option to convert this candidate link into an actual link (where double brackets get added to the markdown). This would be very elegant, although it would presumably be a bit more complex from a development perspective to implement this new category of clickable “candidate link”. (And it would be important for it be clickable, as part of the point of this feature request is to be able to get to related documents quickly.)

Simple “automatic linking” might be easier to implement, and it would be great to have as an option, but it would be a rather blunt instrument, and I’m guessing many people would disable it to avoid having their documents filled with too many links. Obsidian already has an elegant way of handling “unlinked mentions” and links as being distinct from each other, so I don’t think across-the-board automatic linking would be consistent with that.

By the way, various personal wiki software, such as VoodooPad, WikidPad, and ConnectedText, have automatic linking. (My memory is that ConnectedText has the option to only link the first instance in a given text, so as not to generate clutter.) But from what @malecjan said above, it sounds like the implementation in TheBrain might be closer to what we would want for Obsidian, in terms of highlighting what I call “outgoing unlinked mentions”.

Eventually, it would also be great to have various options to automate the process of converting unlinked mentions into links, such as “convert all candidate links in the present document into real links”, “convert all candidate links in the vault into real links”, or even “always convert candidate links into real links” (which, in other words, would be true automatic linking as in Saga). But I would think that the first step would be to implement either a list of “outgoing unlinked mentions” (my original idea) or clickable highlighting of candidate links (@Craig’s idea), and then the additional automation options could come later.

Thank you @lucasd , you summarized my request very well! I like the idea of having a way to automatically “promote” a candidate link to a real one.

1 Like

Sounds like a great plugin / feature idea! Within the existing Obsidian UX, I see a close parallel to spell check — visually flagging words & phrases that match note titles.

1 Like

This and linked version of this FR https://forum.obsidian.md/t/list-the-current-notes-outgoing-links-in-the-links-pane-forward-links/6089 is on the roadmap as a new pane for (forward) links.

What about an advanced search and replace function that would search your whole database and replace the entry with [[ ]] around it?

That way if you had a phrase that was a page you wouldn’t have to be concerned about it only highlighting one word. i.e. “VIM is life” search and replace “[[VIM is life]]” instead of the page [[VIM]] and [[life]].

This FR will be implemented in 0.12.4

3 Likes