{"id":1575,"date":"2023-03-12T10:20:54","date_gmt":"2023-03-12T09:20:54","guid":{"rendered":"http:\/\/evileu.de\/zum-schwarzen-pinguin\/?p=1575"},"modified":"2023-03-12T10:20:56","modified_gmt":"2023-03-12T09:20:56","slug":"ein-ehrgeiziges-projekt-stichwortverzeichnis","status":"publish","type":"post","link":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/2023\/03\/12\/ein-ehrgeiziges-projekt-stichwortverzeichnis\/","title":{"rendered":"Ein ehrgeiziges Projekt: Stichwortverzeichnis"},"content":{"rendered":"<p>Meine beiden mit Abstand am h\u00e4ufigsten gebrauchten Kochb\u00fccher sind &#8222;Das Bayrische Kochbuch&#8220; und &#8222;Joy of Cooking&#8220;. Und bei beiden ist das am Meisten genutzte Feature das Stichwortverzeichnis, da findet man alles! Es eignet sich auch hervorragend zum kreuz- und querschm\u00f6kern, man findet dabei Rezepte die man sonst nie gesehen h\u00e4tte. Langer Rede kurzer Sinn, ein Stichwortverzeichnis (Volltext-Index) w\u00e4re ein schickes Feature f\u00fcr mein Inselfisch-Kochbuch. Und dazu m\u00f6chte ich nicht das Stichwort-Feature von WordPress nutzen, das ist mir viel zu umst\u00e4ndlich zu bedienen und zu schlecht auszuwerten.<\/p>\n<p>Dazu waren einige Vor\u00fcberlegungen n\u00f6tig. Zun\u00e4chst muss ich mal festlegen, woher ich die Stichw\u00f6rter nehme. Ich habe in meinem Inselfisch-Kochbuch knappe 400 Rezepte, in denen relevanter Text in zwei Feldern steht, einmal in post_title und einmal in post_content. Der Titel ist meist zwischen 5 und 10 W\u00f6rter lang, der Content kann wesentlich l\u00e4nger sein, bis zu einer ganzen DIN A 4 Seite und mehr, also auf jeden Fall mehr als 100 W\u00f6rter. Ich m\u00f6chte meine Stichwortbasis nat\u00fcrlich maschinell erzeugen, dazu muss ich irgendwie einzelne W\u00f6rter aus meiner Datenbasis extrahieren. Dazu muss ich meinen Quelltext aufsplitten (ob mit PHP oder VBA wird sich noch zeigen) und in eine Tabelle schreiben. Diese Tabelle (ich nenne sie mal Rohdaten) soll am Ende nur alle Stichw\u00f6rter und eine ID (Autowert) enthalten. Man sieht schon: mit dem Content, das wird uferlos, das k\u00f6nnen leicht mehrere Zehntausend W\u00f6rter werden. Ich beschr\u00e4nke mich also auf die W\u00f6rter aus dem post_title, das ist besser zu handeln. Wir machen das mal als erste Ann\u00e4herung und schauen uns dann an, was wir mit den extrahierten potentiellen Stichworten anfangen k\u00f6nnen.<\/p>\n<p>Wie ich das in MS Access angehe: ich importiere mir die gesamte Tabelle wp_posts aus dem Original-Inselfischkochbuch \u00fcber CSV-Export aus phpmyadmin. Dann schreibe ich mir eine Abfrage,, die nur den post_title enth\u00e4lt und als where-Klausel post_Type = post und post_status = publish bekommt, damit ich nur die echt ver\u00f6ffentlichten Rezepte in der Datenbasis habe. Die Abfrage hei\u00dft quelle und sieht so aus:<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-1579\" src=\"http:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-content\/uploads\/2023\/03\/Screenshot-quelle.jpg\" alt=\"Screenshot quelle\" width=\"1280\" height=\"728\" srcset=\"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-content\/uploads\/2023\/03\/Screenshot-quelle.jpg 1280w, https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-content\/uploads\/2023\/03\/Screenshot-quelle-300x171.jpg 300w, https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-content\/uploads\/2023\/03\/Screenshot-quelle-1024x582.jpg 1024w, https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-content\/uploads\/2023\/03\/Screenshot-quelle-768x437.jpg 768w, https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-content\/uploads\/2023\/03\/Screenshot-quelle-624x355.jpg 624w\" sizes=\"(max-width: 1280px) 100vw, 1280px\" \/><\/p>\n<p>265 Datens\u00e4tze a drei bis zehn W\u00f6rter, damit kann man arbeiten. Ich lege ausserdem fest, dass ich nur Gro\u00dfgeschriebene W\u00f6rter im Stichwortverzeichnis haben m\u00f6chte. Das ist willk\u00fcrlich, aber doch recht sinnvoll, weil damit die ganzen kleinen F\u00fcllw\u00f6rter rausfallen.<\/p>\n<p>Dann gehts rund: Ich lege mir eine Tabelle namens ziel an, die nur zwei Felder hat: ID(AutoWert) und Wort(Text). Sie bleibt zun\u00e4chst leer. Dann bastle ich mir ein VBA-Modul. Hier lege ich zwei Recordsets an, rstquelle das ist die Abfrage Quelle, und rstziel, das ist die Tabelle Ziel.<\/p>\n<p>Jetzt gehe ich zum ersten Datensatz in rstquelle und lese mir den Inhalt des Feldes post_title ein. Dann verwende ich die VBA-Funktion split(), die zerlegt das Feld in einzelne W\u00f6rter, die in ein Array geschrieben werden.\u00a0 Ich laufe durch dieses Array und pr\u00fcfe zun\u00e4chst, ob das Wort Gro\u00df oder klein geschrieben ist:<\/p>\n<p>Asc(Left(liste(i), 1) &gt;= 65) And (Asc(Left(liste(i), 1)) &lt;= 90)<\/p>\n<p>Mit dieser Funktion bin ich nicht so recht gl\u00fccklich, weil sie unerkl\u00e4rlicherweise manche W\u00f6rter mit Kleinbuchstaben doch durchrutschen l\u00e4\u00dft, aber ich hab noch nichts besseres gefunden.<\/p>\n<p>Dann werden noch evtl vorhandene Sonderzeichen entfernt, dazu gibts eine Funktion die Folgende Zeichenkette durchl\u00e4uft:<\/p>\n<p>Const strSonderzeichen As String = &#8222;.,:;#+&#8217;*?=)(\/%$\u00a7!~\\}][{&#8220;<\/p>\n<p>Dann schreibe jeweils ein gefundenes, geputztes Wort in die Zieltabelle.\u00a0Dann gehe ich zum n\u00e4chsten Datensatz der Quelltabelle und wiederhole den Vorgang. das mache ich, bis EOF der Quelltabelle erreicht ist.<\/p>\n<p>Hurra! 669 Datens\u00e4tze, beim ersten Dr\u00fcberschauen sieht es schon mal ganz gut aus. Noch die Dubletten ausblenden, das geht mit einer Abfrage mit Gruppierung ganz easy. Sortieren, man sieht noch ein bisschen Datenschmutz ganz oben, das bereinigt man per Hand.<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-1581\" src=\"http:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-content\/uploads\/2023\/03\/abfrage-quelle.jpg\" alt=\"abfrage quelle\" width=\"1280\" height=\"728\" srcset=\"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-content\/uploads\/2023\/03\/abfrage-quelle.jpg 1280w, https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-content\/uploads\/2023\/03\/abfrage-quelle-300x171.jpg 300w, https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-content\/uploads\/2023\/03\/abfrage-quelle-1024x582.jpg 1024w, https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-content\/uploads\/2023\/03\/abfrage-quelle-768x437.jpg 768w, https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-content\/uploads\/2023\/03\/abfrage-quelle-624x355.jpg 624w\" sizes=\"(max-width: 1280px) 100vw, 1280px\" \/><\/p>\n<p>Es bleiben 496 recht manierliche Stichworte \u00fcbrig. Damit k\u00f6nnte ich jetzt schon nach MySQL und WordPress gehen und die Webseite aufbauen, aber ich halte mich noch ein wenig in Access auf und teste nochmal, mit der &#8222;wackeligen&#8220; Asc-Funktion bin ich nicht zufrieden.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Meine beiden mit Abstand am h\u00e4ufigsten gebrauchten Kochb\u00fccher sind &#8222;Das Bayrische Kochbuch&#8220; und &#8222;Joy of Cooking&#8220;. Und bei beiden ist das am Meisten genutzte Feature das Stichwortverzeichnis, da findet man alles! Es eignet sich auch hervorragend zum kreuz- und querschm\u00f6kern, man findet dabei Rezepte die man sonst nie gesehen h\u00e4tte. Langer Rede kurzer Sinn, ein [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[1,25,20,27,4,8,63,2],"tags":[],"_links":{"self":[{"href":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-json\/wp\/v2\/posts\/1575"}],"collection":[{"href":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-json\/wp\/v2\/comments?post=1575"}],"version-history":[{"count":5,"href":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-json\/wp\/v2\/posts\/1575\/revisions"}],"predecessor-version":[{"id":1582,"href":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-json\/wp\/v2\/posts\/1575\/revisions\/1582"}],"wp:attachment":[{"href":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-json\/wp\/v2\/media?parent=1575"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-json\/wp\/v2\/categories?post=1575"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/evileu.de\/zum-schwarzen-pinguin\/wp-json\/wp\/v2\/tags?post=1575"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}