<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Taxonomie on Natenoms Blog</title><link>https://natenom.de/tags/taxonomie/</link><description>Recent content in Taxonomie on Natenoms Blog</description><generator>Hugo -- gohugo.io</generator><language>de</language><copyright/><lastBuildDate>Tue, 08 Feb 2022 05:30:20 +0100</lastBuildDate><atom:link href="https://natenom.de/tags/taxonomie/index.xml" rel="self" type="application/rss+xml"/><item><title>Kategorien und Tags mitsamt Anzahl der Vorkommen (in Hugo) per Shell anzeigen und filtern</title><link>https://natenom.de/2022/02/kategorien-und-tags-anzahl-vorkommen-hugo-anzeige-und-filter/</link><pubDate>Tue, 08 Feb 2022 05:30:20 +0100</pubDate><guid>https://natenom.de/2022/02/kategorien-und-tags-anzahl-vorkommen-hugo-anzeige-und-filter/</guid><description>&lt;p>Vorab: Das hier ist sehr hacky. Aber ich habe leider keine entsprechenden Kenntnisse, um das richtig umzusetzen. Und da ich ein fauler Mensch bin, reicht mir die beschriebene Lösung aus, um mein Problem zu lösen. Wer etwas Würde hat, macht jetzt am besten diesen Beitrag wieder zu :P&lt;/p></description><content:encoded><![CDATA[<p>Vorab: Das hier ist sehr hacky. Aber ich habe leider keine entsprechenden Kenntnisse, um das richtig umzusetzen. Und da ich ein fauler Mensch bin, reicht mir die beschriebene Lösung aus, um mein Problem zu lösen. Wer etwas Würde hat, macht jetzt am besten diesen Beitrag wieder zu :P</p>
<div class="shortcode-notice update">
    <div class="shortcode-notice-title update">
        Update</div>
    <div class="notice-content"><p>2024-01-06: Ich habe eine verbesserte Variante erstellt, die außerhalb von Hugo funktioniert und sehr viel einfacher, <a  href="/2024/01/verbessertes-script-fuer-haeufigkeit-von-kategorien-und-tags-in-einem-hugo-blog/">siehe hier</a>.</p>
<p>2022-02-11: Bash-Scripte gefixt, damit sie auch Tags und Kategorien mit Bindestrichen anzeigen.</p>
</div>
</div>



<h2 id="was-will-ich-überhaupt-lösen" data-numberify>Was will ich überhaupt lösen?<a class="anchor ms-1" href="#was-will-ich-überhaupt-lösen"></a></h2>
<p>Mein Problem: In WordPress kann man beim Einfügen von Tags in einen Beitrag direkt Vorschläge sehen, die zum eingegebenen String passen. So wird verhindert, dass es irgendwann verschiedene Schreibweisen von Tags gibt und man immer die selben Tags verwendet.</p>
<p>In Hugo gibt es das natürlich nicht. Zumindest habe ich dazu nichts gefunden. Deshalb möchte ich eine Liste aller Tags angezeigt bekommen, die bisher allen vorhandenen Blogbeiträgen verwendet wurden und dazu auch noch die Anzahl der Vorkommen.</p>
<p>Ich könnte jetzt anfangen, $Suchmaschine zu benutzen und mir in Python irgendwas zusammen zu coden. Ich bin für die einfachere Möglichkeit. Denn schließlich zeigt das bei mir im Blog verwendete Theme bereits die Tags und Kategorien an und und sogar, wie oft diese verwendet wurden. Hugo kann also die Arbeit für mich machen.</p>
<p>Die Ideallösung wäre, wenn ich eine json-Datei erstellen lassen könnte mit diesen Informationen. Wie man so etwas macht, konnte ich leider nicht herausfinden. Ich bin Anwender, kein Programmierer.</p>

<h2 id="ultra-hacky-ab-jetzt-p" data-numberify>Ultra hacky ab jetzt :P<a class="anchor ms-1" href="#ultra-hacky-ab-jetzt-p"></a></h2>
<div class="shortcode-notice hinweis">
    <div class="shortcode-notice-title hinweis">
        Hinweis</div>
    <div class="notice-content">Ich habe das endlich mal in einigermaßen gut gelöst und in meinen Hugo Helper eingebaut, siehe <a  href="/2024/01/mein-hugo-helper-python-script-und-was-es-tun-kann/#tags-kategorien-und-deren-h%c3%a4ufigkeit">hier</a>.</div>
</div>


<p>Letzte Warnung: Mach hier zu, wenn du noch etwas Würde behalten möchtest :)</p>
<p>Zuerst erstellt man einen Shortcode in <code>layouts/shortcodes/</code> mit dem Namen <code>_internal-cats-tags.html</code> mit folgendem Inhalt:
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-text" data-lang="text"><span style="display:flex;"><span>{{ range $.Site.Taxonomies.categories.ByCount }}
</span></span><span style="display:flex;"><span>internal_category:{{ .Name }}:{{ .Count }}:
</span></span><span style="display:flex;"><span>{{end}}
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>{{ range $.Site.Taxonomies.tags.ByCount }}
</span></span><span style="display:flex;"><span>internal_tag:{{ .Name }}:{{ .Count }}:
</span></span><span style="display:flex;"><span>{{end}}</span></span></code></pre></div></p>
<p>Es ist Absicht, dass hier eine Textliste und kein HTML generiert werden soll. So muss man später weniger filtern.</p>
<p>Danach erstellt man in <code>contents/</code> eine Datei <code>_internal_cats_tags.md</code> mit diesem Inhalt:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-markdown" data-lang="markdown"><span style="display:flex;"><span>---
</span></span><span style="display:flex;"><span>title: internal-only-cats-tags
</span></span><span style="display:flex;"><span>date: 2022-02-08T02:43:20+01:00
</span></span><span style="display:flex;"><span>---
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>{{&lt; <span style="color:#f92672">_internal-cats-tags</span> &gt;}}
</span></span></code></pre></div><p>Die Datei ist sollte jedoch am besten noch auf Entwurfsmodus eingestellt werden, also den Wert <code>true</code> im Tag <code>draft</code> haben, um nicht auf der veröffentlichten Website zu landen.</p>
<p>Dann lässt man Hugo die ganze Website rendern (Schalter <code>-D</code> für den Hugo-Aufruf nicht vergessen, damit Drafts auch gebaut werden) und erhält die Datei <code>public/_internal_cats_tags/index.html</code>.</p>

<h2 id="ergebnis" data-numberify>Ergebnis<a class="anchor ms-1" href="#ergebnis"></a></h2>
<p>So sieht die generierte Seite aus:
</p><figure class="image-caption"><picture>
                <source type="image/webp" srcset="/2022/02/kategorien-und-tags-anzahl-vorkommen-hugo-anzeige-und-filter/images/_hub2d8215fc7665489e6baacd1ec98ca28_201809_18bfa464992de8b933bee685f2d9f831.webp 360w,/2022/02/kategorien-und-tags-anzahl-vorkommen-hugo-anzeige-und-filter/images/_hub2d8215fc7665489e6baacd1ec98ca28_201809_104afa3740efa04066cda327ce3e94d3.webp 500w,/2022/02/kategorien-und-tags-anzahl-vorkommen-hugo-anzeige-und-filter/images/_hub2d8215fc7665489e6baacd1ec98ca28_201809_b634804b46efa6536e2b4b8a371f8818.webp 816w"
                                          sizes="(max-width: 424px) 360px, (max-width: 596px) 500px, (min-width: 565px) 816px" />
                <img alt="Von Hugo generierte Liste von Kategorien und Tags und deren verwendete Häufigkeit" srcset="/2022/02/kategorien-und-tags-anzahl-vorkommen-hugo-anzeige-und-filter/images/_hub2d8215fc7665489e6baacd1ec98ca28_201809_18bfa464992de8b933bee685f2d9f831.webp 360w, /2022/02/kategorien-und-tags-anzahl-vorkommen-hugo-anzeige-und-filter/images/_hub2d8215fc7665489e6baacd1ec98ca28_201809_104afa3740efa04066cda327ce3e94d3.webp 500w, /2022/02/kategorien-und-tags-anzahl-vorkommen-hugo-anzeige-und-filter/images/_hub2d8215fc7665489e6baacd1ec98ca28_201809_b634804b46efa6536e2b4b8a371f8818.webp 816w"
                     sizes="(max-width: 424px) 360px, (max-width: 596px) 500px, (min-width: 565px) 816px"
                     src="/2022/02/kategorien-und-tags-anzahl-vorkommen-hugo-anzeige-und-filter/images/_hub2d8215fc7665489e6baacd1ec98ca28_201809_b634804b46efa6536e2b4b8a371f8818.webp" title="Von Hugo generierte Liste von Kategorien und Tags und deren verwendete Häufigkeit" loading="lazy" width="816" height="833" /></picture><figcaption>Von Hugo generierte Liste von Kategorien und Tags und deren verwendete Häufigkeit</figcaption></figure><p>
</p>
<p>Und so sieht der Quelltext aus:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-html" data-lang="html"><span style="display:flex;"><span>[…] internal_category:643:allgemein: internal_category:416:mobilität:
</span></span><span style="display:flex;"><span>internal_category:332:fotografie: internal_category:326:mumble:
</span></span><span style="display:flex;"><span>internal_category:274:musik: […] internal_tag:761:open-source:
</span></span><span style="display:flex;"><span>internal_tag:525:fahrrad: internal_tag:368:fotos:
</span></span><span style="display:flex;"><span>internal_tag:348:creative-commons: internal_tag:335:mumble:
</span></span><span style="display:flex;"><span>internal_tag:326:mobilität: internal_tag:292:musik:[…]
</span></span></code></pre></div><p>Aus dieser Seite kann man nun die Daten filtern.</p>

<h2 id="daten-filtern-und-in-neue-dateien-schreiben" data-numberify>Daten filtern und in neue Dateien schreiben<a class="anchor ms-1" href="#daten-filtern-und-in-neue-dateien-schreiben"></a></h2>
<p>Jetzt kann man die Kategorien und die Tags herausfiltern und in neue Datien schreiben.</p>

<h3 id="nach-kategorien-filtern" data-numberify>Nach Kategorien filtern<a class="anchor ms-1" href="#nach-kategorien-filtern"></a></h3>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>grep -i -E <span style="color:#e6db74">&#34;^internal_category:[0-9]{1,4}:[a-z0-9-]*:</span>$<span style="color:#e6db74">&#34;</span> public/_internal_cats_tags/index.html | sort -r -V | uniq | cut -d<span style="color:#e6db74">&#39;:&#39;</span> -f2,3 &gt; _list-categories.txt
</span></span></code></pre></div><p>Ergebnis:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-text" data-lang="text"><span style="display:flex;"><span>643:allgemein
</span></span><span style="display:flex;"><span>416:mobilität
</span></span><span style="display:flex;"><span>332:fotografie
</span></span><span style="display:flex;"><span>326:mumble
</span></span><span style="display:flex;"><span>274:musik
</span></span><span style="display:flex;"><span>225:linux
</span></span><span style="display:flex;"><span>162:web
</span></span><span style="display:flex;"><span>94:android
</span></span><span style="display:flex;"><span>66:spiele
</span></span><span style="display:flex;"><span>34:linkdump
</span></span></code></pre></div>
<h3 id="tags" data-numberify>Tags<a class="anchor ms-1" href="#tags"></a></h3>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>grep -i -E <span style="color:#e6db74">&#34;^internal_tag:[0-9]{1,4}:[a-z0-9-]*:</span>$<span style="color:#e6db74">&#34;</span> public/_internal_cats_tags/index.html | sort -r -V | uniq | cut -d<span style="color:#e6db74">&#39;:&#39;</span> -f2,3 &gt; _list-tags.txt
</span></span></code></pre></div><p>Ergebnis:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-text" data-lang="text"><span style="display:flex;"><span>525:fahrrad
</span></span><span style="display:flex;"><span>368:fotos
</span></span><span style="display:flex;"><span>335:mumble
</span></span><span style="display:flex;"><span>326:mobilität
</span></span><span style="display:flex;"><span>292:musik
</span></span><span style="display:flex;"><span>256:linux
</span></span><span style="display:flex;"><span>241:pforzheim
</span></span><span style="display:flex;"><span>215:videos
</span></span><span style="display:flex;"><span>213:natur
</span></span><span style="display:flex;"><span>206:filme
</span></span><span style="display:flex;"><span>[...]
</span></span></code></pre></div>
<h2 id="helfer-für-die-bash" data-numberify>Helfer für die Bash<a class="anchor ms-1" href="#helfer-für-die-bash"></a></h2>
<p>In die <code>.bashrc</code> kommt hinein:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>export HUGO_WORKDIR<span style="color:#f92672">=</span><span style="color:#e6db74">&#34;/home/natenom.de-hugo&#34;</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">function</span> hugo-check-and-write-cats-tags <span style="color:#f92672">(</span>
</span></span><span style="display:flex;"><span>    cd $HUGO_WORKDIR
</span></span><span style="display:flex;"><span>    test -f public/_internal_cats_tags/index.html <span style="color:#f92672">&amp;&amp;</span> <span style="color:#ae81ff">\
</span></span></span><span style="display:flex;"><span><span style="color:#ae81ff"></span>        grep -i -E <span style="color:#e6db74">&#34;^internal_category:[0-9]{1,4}:[a-z0-9]*:</span>$<span style="color:#e6db74">&#34;</span> public/_internal_cats_tags/index.html | sort -r -V | uniq | cut -d<span style="color:#e6db74">&#39;:&#39;</span> -f2,3 &gt; _list-categories.txt <span style="color:#f92672">&amp;&amp;</span> <span style="color:#ae81ff">\
</span></span></span><span style="display:flex;"><span><span style="color:#ae81ff"></span>        grep -i -E <span style="color:#e6db74">&#34;^internal_tag:[0-9]{1,4}:[a-z0-9]*:</span>$<span style="color:#e6db74">&#34;</span> public/_internal_cats_tags/index.html | sort -r -V | uniq | cut -d<span style="color:#e6db74">&#39;:&#39;</span> -f2,3 &gt; _list-tags.txt <span style="color:#f92672">&amp;&amp;</span> <span style="color:#ae81ff">\
</span></span></span><span style="display:flex;"><span><span style="color:#ae81ff"></span>        echo <span style="color:#e6db74">&#34;Updates written&#34;</span> <span style="color:#f92672">||</span> <span style="color:#ae81ff">\
</span></span></span><span style="display:flex;"><span><span style="color:#ae81ff"></span>        echo <span style="color:#e6db74">&#34;File is not available, no updates.&#34;</span>
</span></span><span style="display:flex;"><span><span style="color:#f92672">)</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>alias hugo-search-tags<span style="color:#f92672">=</span><span style="color:#e6db74">&#39;cd $HUGO_WORKDIR; cat _list-tags.txt | grep -i &#39;</span>
</span></span><span style="display:flex;"><span>alias hugo-search-categories<span style="color:#f92672">=</span><span style="color:#e6db74">&#39;cd $HUGO_WORKDIR; cat _list-categories.txt | grep -i &#39;</span>
</span></span></code></pre></div><p>Wenn ich den Eindruck habe, dass die extrahierten Daten veralten sein könnten, rufe ich in der Shell <code>hugo-check-and-write-cats-tags</code> auf, sobald die komplette Website generiert wurde.</p>

<h2 id="suchfunktion" data-numberify>Suchfunktion<a class="anchor ms-1" href="#suchfunktion"></a></h2>
<p>Jetzt kann ich nach Tags suchen:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>$ hugo-search-tags oliz
</span></span><span style="display:flex;"><span>66:polizei
</span></span><span style="display:flex;"><span>3:polizeipräsidium
</span></span><span style="display:flex;"><span>2:polizeipräsidentin
</span></span></code></pre></div><p>Und nach Kategorien:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>$ hugo-search-categories <span style="color:#e6db74">&#34;&#34;</span>
</span></span><span style="display:flex;"><span>643:allgemein
</span></span><span style="display:flex;"><span>416:mobilität
</span></span><span style="display:flex;"><span>332:fotografie
</span></span><span style="display:flex;"><span>326:mumble
</span></span><span style="display:flex;"><span>274:musik
</span></span><span style="display:flex;"><span>225:linux
</span></span><span style="display:flex;"><span><span style="color:#f92672">[</span>…<span style="color:#f92672">]</span>
</span></span></code></pre></div><p>Und im <a  class='urlextern'  href="https://kate-editor.org/">KDE Advanced Text Editor (kate)</a> kann ich dann direkt mit <strong>F4</strong> eine Konsole öffnen und nach Kategorien und Tags suchen, während ich das Front Matter bearbeite.</p>
 <figure class="image-caption"><a href="images/2022-02-08-kate-mit-shell-fuer-suche-nach-kategorien-und-tags.png"><picture>
                <source type="image/webp" srcset="/2022/02/kategorien-und-tags-anzahl-vorkommen-hugo-anzeige-und-filter/images/_hubc0c046457be46aebe0cf819bf231d44_90856_c5508e25207c603432c30c7f9789eb87.webp 360w,/2022/02/kategorien-und-tags-anzahl-vorkommen-hugo-anzeige-und-filter/images/_hubc0c046457be46aebe0cf819bf231d44_90856_f8dcdb125b0f34580edd550ac453f595.webp 500w,/2022/02/kategorien-und-tags-anzahl-vorkommen-hugo-anzeige-und-filter/images/_hubc0c046457be46aebe0cf819bf231d44_90856_64c5ff4aadcb8d6d74b8e5c76bb5dbf2.webp 816w"
                                          sizes="(max-width: 424px) 360px, (max-width: 596px) 500px, (min-width: 565px) 816px" />
                <img alt="" srcset="/2022/02/kategorien-und-tags-anzahl-vorkommen-hugo-anzeige-und-filter/images/_hubc0c046457be46aebe0cf819bf231d44_90856_c5508e25207c603432c30c7f9789eb87.webp 360w, /2022/02/kategorien-und-tags-anzahl-vorkommen-hugo-anzeige-und-filter/images/_hubc0c046457be46aebe0cf819bf231d44_90856_f8dcdb125b0f34580edd550ac453f595.webp 500w, /2022/02/kategorien-und-tags-anzahl-vorkommen-hugo-anzeige-und-filter/images/_hubc0c046457be46aebe0cf819bf231d44_90856_64c5ff4aadcb8d6d74b8e5c76bb5dbf2.webp 816w"
                     sizes="(max-width: 424px) 360px, (max-width: 596px) 500px, (min-width: 565px) 816px"
                     src="/2022/02/kategorien-und-tags-anzahl-vorkommen-hugo-anzeige-und-filter/images/_hubc0c046457be46aebe0cf819bf231d44_90856_64c5ff4aadcb8d6d74b8e5c76bb5dbf2.webp" title="" loading="lazy" width="816" height="568" /></picture></a><figcaption>Kate Editor mit einer geöffneten Shell zur Suche nach Kategorien und Tags.</figcaption></figure>

<h2 id="später" data-numberify>Später<a class="anchor ms-1" href="#später"></a></h2>
<p>Und irgendwann mal, später, also irgendwann später, mache ich das dann auch so, dass man sich nicht für die Lösung schämen muss. Ganz bestimmt.</p>]]></content:encoded><enclosure url="https://natenom.de/2022/02/kategorien-und-tags-anzahl-vorkommen-hugo-anzeige-und-filter/cover.png" length="40322" type="image/png"/></item></channel></rss>