Counting specific words

69 views
Skip to first unread message

mohamed maghrabi

unread,
Sep 22, 2021, 9:14:55 AM9/22/21
to TiddlyWiki
Hi ,

is there a way to count the number of occurrences of a specific word in a tiddler

I have serached , but could only find a plugin that counts the total number of words, or total number characters.

 

Jean-Pierre Rivière

unread,
Sep 23, 2021, 10:37:59 AM9/23/21
to TiddlyWiki
Here it is.

```
\define count-word(word, tid)
{{{ [[$tid$]get[text]search-replace:gi:regexp[\b$word$\b],[þ]dump:v[first]search-replace:g:regexp<but>,[]dump:v[final]length[]] }}}
\end

<<count-word foo "bar tiddler tittle">>
```

I use a char that should never be within the tiddler, þ in my example. You can use another rare character is old English is concerned! I replace every occurrence of the word with it, then remove any other character then count the length of the result. If you want case sensitive search, just omit the `i` flag in the first `search-replace`.

Jeremy Ruston

unread,
Sep 23, 2021, 10:45:46 AM9/23/21
to tiddl...@googlegroups.com
Another technique is to use the “split” operator to split the string by the word:

\define count-words(title,word)
<$text text={{{ [<__title__>get[text]split<__word__>count[]subtract[1]] }}}/>
\end

<<count-words "HelloThere" "the">>

Using the splitregexp operator instead allows would allow splitting case insensitively, which might be more useful.

Best wishes

Jeremy.

--
You received this message because you are subscribed to the Google Groups "TiddlyWiki" group.
To unsubscribe from this group and stop receiving emails from it, send an email to tiddlywiki+...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/tiddlywiki/a30f622a-627f-41a5-a532-4015e0f3faaen%40googlegroups.com.

Jean-Pierre Rivière

unread,
Sep 23, 2021, 12:00:57 PM9/23/21
to TiddlyWiki
You made an error in your macro, Jeremy. You should have used $arg$ instead of <arg>.

Thus your code would be


\define count-words(title,word)
<$text text={{{ [[$title$]get[text]split[$word$]count[]subtract[1]] }}}/>
\end

But it is false nonetheless because it would, for example, cut word "totem" if asked for word "to". My regular expression does not do that thanks to the \b at both ends of the arguments.

Jeremy Ruston

unread,
Sep 23, 2021, 12:04:26 PM9/23/21
to tiddl...@googlegroups.com
Hi Jean-Pierre
You made an error in your macro, Jeremy. You should have used $arg$ instead of <arg>.

It's actually not an error: it's an alternative way to access the parameters of macros. It avoids the problem that otherwise the code would fail with a tiddler title containing a closing square bracket.

There are docs here under "Parameters as Variables <<__...__>>":


But it is false nonetheless because it would, for example, cut word "totem" if asked for word "to". My regular expression does not do that thanks to the \b at both ends of the arguments.

Yes, I did that quickly, but indeed I think that splitregexp would be needed to make it practical, both to resolve the word boundary issue and the case sensitivity issue.

Best wishes

Jeremy.

Jean-Pierre Rivière

unread,
Sep 23, 2021, 5:32:19 PM9/23/21
to TiddlyWiki
actually, https://tiddlywiki.com/#Macro%20Definitions%20in%20WikiText is very confusing! It took me a lot of time to make any sense out of it for the special case like using <<< and after my own tests, I have failed to see that as useful.

Your code is actual code and it would be good to use it rather than the current example.

I was sure you coded <arg> instead of <__arg__> and I had copied it and executed. It was not functioning as it should. But I can no more remember why: was it the problem I told about why regexp was better or was it that it did nothing?

Anyway, thank you for your correction about what I told. I have yet again something about tiddlywiki today! And I could use it, definitely.

paulgilbert2000

unread,
Sep 24, 2021, 8:07:16 PM9/24/21
to TiddlyWiki
Thank you very much,

both work, also one more question , to get anywhere remotely close to writing code like this  for tiddly wiki , what language should i try to learn, i have no coding skills, and was just wondering if i would invest my time in learning a bit, what language should i be looking at?

thanks again

TW Tones

unread,
Sep 24, 2021, 11:36:32 PM9/24/21
to TiddlyWiki
I would just add all the solutions here it are counting words in a title or string or the text field. None are attempting to render the tiddler first so that lists transclusions and macros etc.. are first expanded.

You can use the wikify widget to wikify the result into a variable and pass that to the word count.

Tones

Reply all
Reply to author
Forward
0 new messages