Jump to content

Wikifunctions:Status-Updates/2024-10-17

From Wikifunctions
This page is a translated version of the page Wikifunctions:Status updates/2024-10-17 and the translation is 100% complete.
Wikifunctions Status-Updates Translate

Abstrakte Wikipedia über Mailingliste Support-Team Abstrakte Wikipedia auf IRC Wikifunctions auf Telegram Wikifunctions auf Mastodon Wikifunctions auf Twitter Wikifunctions auf Facebook Wikifunctions auf Youtube Website von Wikifunctions Translate

Wie könnte abstrakter Inhalt aussehen?

Gastautor des Newsletters dieser Woche ist Mahir Morshed.

Der Begriff ‘abstrakter Inhalt’ für die Abstrakte Wikipedia ergibt sich aus der Analogie zu regulären Inhalten in regulären Wikipedias. Diese regulären Inhalte sind in der Schrift einer bestimmten Sprache verfasst und sind oberflächlich betrachtet nicht eindeutig mit den strukturierten Informationen in Wikidata verbunden. Abstrakte Inhalte sollten dagegen nicht an die Schrift einer bestimmten Sprache gebunden sein, sondern aus Informationen in Wikidata abgeleitet werden. Darüber hinaus wäre es nützlich, wenn Teile dieser Inhalte eine vereinfachte Syntax hätten, um sowohl die zur Verarbeitung und Bearbeitung dieser Inhalte erforderliche Logik zu reduzieren als auch sicherzustellen, dass Ergänzungen der Inhalte nicht zwangsläufig Änderungen am Darstellungsformat erfordern.

Es bleibt dann zu besprechen, wie dieser abstrakte Inhalt aussehen sollte, damit diese Wünsche erreicht werden. Versuchen wir, eine solche Darstellung durch einige Änderungen an einem Konstruktor für einen einfachen Satz zu erreichen, beginnend mit etwas, das ähnlich strukturiert ist wie Abbildung 1 in Dennys CACM-Publikation:

 Action(
     predicate: eating,
     eater: Robert J. Jones,
     eaten: ice cream,
     location: Decatur, Illinois,
     time: 1 July 2023, 11:30am
 )

Die beabsichtigte Bedeutung dieses Satzes ist “Robert J. Jones hat am 1. Juli 2023 um 11:30 Uhr in Decatur, Illinois, Eis gegessen.” Im Moment ist alles im Konstruktor auf Englisch und keines der Argumente bezieht sich überhaupt auf Wikidata. Lass uns das letztere dieser Probleme (größtenteils) beheben:

 Action(
     predicate: Q213449,
     eater: Q33103898,
     eaten: Q13233,
     location: Q506325,
     time: “+2023-07-01T16:30:00Z”
 )

Das ist zwar besser, aber der Name des Konstruktors und die Namen der Argumente sind immer noch auf Englisch. Was wäre, wenn wir Wikidata-Datenobjekte verwenden würden, um diese ebenfalls darzustellen?

 Q4026292(
     Q179080: Q213449,
     Q20984678: Q33103898,
     Q2095: Q13233,
     Q115095765: Q506325,
     Q7805404: +2023-07-01T16:30:00Z
 )

Da nun fast alles in diesem Konstruktor durch eine Wikidata-QID dargestellt wird, kann er vollständig in einer bestimmten Sprache angezeigt werden, vorausgesetzt, dass jedes referenzierte Datenobjekt eine Bezeichnung in dieser Sprache hat, beispielsweise in Bengalisch:

 কার্য(
     বিধেয়: খাওয়া,
     ভোক্তা: রবার্ট জে জোন্স,
     খাদ্য: আইসক্রিম,
     অবস্থান: ডেকেটার, ইলিনয়,
     ঘটনার সময়: +2023-07-01T16:30:00Z
 )

Wir sind jedoch noch nicht fertig: Könnten wir diese Syntax ein wenig vereinfachen? (Können vermeiden, benannte Argumente für Funktionen zu benötigen?)

 Q4026292(
     Q179080(Q213449),
     Q20984678(Q33103898),
     Q2095(Q13233),
     Q115095765(Q506325),
     Q7805404(+2023-07-01T16:30:00Z)
 )

Diese Änderung, von der Verwendung benannter Funktionsargumente zur Verwendung von Einzelelement-Funktionen als unbenannte Argumente, sollte einen hoffentlich an die Kompositionssyntax erinnern, in der Wikifunctions-Funktionen implementiert werden können.

Da verschiedene Prädikate unterschiedliche Teilnehmerrollen erfordern – ’Trinken’ erfordert ’Trinker’ und ’Getränk’, ’Lesen’ erfordert ’Leser’ und ’Gelesenes’ und so weiter – wird die Anzahl der Funktionen, die an dieser Stelle eingeführt werden müssen, wahrscheinlich in die Höhe schnellen. Wir können diese Zahl reduzieren, indem wir sie verallgemeinern, um Q613930 zu verwenden, um Teilnehmerrollen anzugeben, und stattdessen die QIDs beibehalten, die wir für diese Rollen als Argumente eingeführt haben:

 Q4026292(
     Q179080(Q213449),
     Q613930(Q20984678, Q33103898),
     Q613930(Q2095, Q13233),
     Q115095765(Q506325),
     Q7805404(+2023-07-01T16:30:00Z)
 )

Der Bezug zu bestimmten Programmiersprachen lässt sich durch eine kleine Umstellung noch deutlicher machen:

 (“Q4026292”
     (“Q179080” “Q213449”)
     (“Q613930” “Q20984678” “Q33103898”)
     (“Q613930” “Q2095” “Q13233”)
     (“Q115095765” “Q506325”)
     (“Q7805404” “+2023-07-01T16:30:00Z”)
 )

Dieses Format, das der Syntax von Lisp-ähnlichen Programmiersprachen entlehnt ist, sollte meiner Meinung nach zum Speichern abstrakter Inhalte für die Abstrakte Wikipedia verwendet werden. Als rein optionale letzte Maßnahme der Vollständigkeit halber versuchen wir, den Zeitstempel in QIDs umzuwandeln, indem wir Elemente für Datum, Uhrzeit und Zeitzone verwenden:

 (“Q4026292”
     (“Q179080” “Q213449”)
     (“Q613930” “Q20984678” “Q33103898”)
     (“Q613930” “Q2095” “Q13233”)
     (“Q115095765” “Q506325”)
     (“Q7805404” (“Q186885” “Q69306847” “Q95056915” “Q15406405”))
 )

Da dieses Endergebnis vollständig aus Zeichenketten (wenn das “Q” überall entfernt wird, aus ganzen Zahlen?) und Listen besteht – beides primitivere Datenstrukturen in vielen Umgebungen – kann es gelesen und geändert werden, so wie andere Listen von Zeichenketten in diesen Umgebungen behandelt werden. (Tatsächlich können Listen von Zeichenketten als Eingabe für Wikifunctions-Funktionen verwendet werden, auch wenn die tatsächliche Verarbeitung von Wikidata-Datenobjekten noch bevorsteht.) Zur Erinnerung: Da jede Zeichenkette eine Wikidata-QID ist, kann dieses Endergebnis in einer bestimmten Sprache angezeigt werden, sofern jedes Datenobjekt eine Bezeichnung in dieser Sprache hat.

Der Konstruktor, dessen schriftliche Form wir modifiziert haben, stellt meiner Meinung nach auch einen sehr nützlichen Baustein für abstrakte Inhalte dar. In vielen Sprachen würde dies einem strukturell einfacheren Satz entsprechen – wenn auch einem, dessen Hauptverb nicht so etwas wie ‘sein’ oder ‘haben’ ist – vollständig mit einem Prädikat (‘essen’), Teilnehmerrollen (wie ‘Esser’ und ‘Nahrung’) und einer beliebigen Anzahl von Modifikatoren (wie ‘Ort’ und ‘Zeit’). Es gibt bereits viele Wikidata-Datenobjekte für Prädikate, mit Wikidata-Verb- und Verbphrasen-Lexemen, die darauf verweisen, und es gibt eine aufkommende Anstrengung, Datenobjekte einzuführen, um Teilnehmerrollen für Prädikate darzustellen. Im Prinzip wäre die Reihenfolge der Komponenten innerhalb eines solchen Blocks nicht von Bedeutung, sodass das Folgende funktional identisch mit dem wäre, was oben gezeigt wurde:

 (“Q4026292”
     (“Q115095765” “Q506325”)
     (“Q179080” “Q213449”)
     (“Q7805404” (“Q186885” “Q69306847” “Q95056915” “Q15406405”))
     (“Q613930” “Q2095” “Q13233”)
     (“Q613930” “Q20984678” “Q33103898”)
 )

Das Zusammensetzen dieser Blöcke erfordert die Einführung einer gewissen Mechanik, aber mit der Darstellung, die wir erreicht haben, ist es möglich, diese Mechanik realisierbar zu machen. Im Folgenden sind nur drei mögliche Beispiele aufgeführt:

  • Zwei einfache Sätze können koordiniert werden (z. B. durch die Verwendung von ‘und’, ‘oder’, ‘aber’ usw.), indem beide als Argumente zu einer neuen Liste hinzugefügt werden. Das folgende Datenobjekt Q13381767 stellt beispielsweise eine einfache ‘und’-Beziehung dar:
 (“Q13381767”
     (“Q4026292” (“Q179080” “Q213449”) [...])
     (“Q4026292” (“Q179080” “Q199657”) [...])
 )
  • Ein einfacher Satz kann einem anderen untergeordnet werden (z. B. durch die Verwendung von ‘weil’, ‘wenn’, ‘während’ usw.), indem ein Modifikator eingeführt wird, der diesen einfachen Satz umschließt, und dieser Modifikator dann im anderen Satz verwendet wird. Das folgende Datenobjekt Q12774849 stellt beispielsweise eine einfache ‘weil’-Beziehung dar:
 (“Q4026292” (“Q179080” “Q213449”) [...]
     (“Q12774849”
         (“Q4026292” (“Q179080” “Q199657”) [...])
     )
 )
  • Beliebige Modifikatoren können nach der Bildung eines einfachen Satzes angewendet werden, indem sie um diesen Satz herum angeordnet werden. Das folgende Datenobjekt Q1478451 stellt beispielsweise eine einfache Verneinung dar:
 (“Q1478451”
     (“Q4026292” (“Q179080” “Q199657”) [...])
 )

Vieles, wenn nicht alles, was oben beschrieben wurde, wurde bei elemwala.toolforge.org (betrieben durch Ninai/Udiron) in die Praxis umgesetzt.

Gastautor des Newsletters dieser Woche ist Mahir Morshed. Wenn du einen von einem Gastautor verfassten Newsletter vorschlagen möchtest, wende dich bitte an Luca oder Denny.

Letzte Änderungen an der Software

Diese Woche gab es nur sehr wenige technische Änderungen, da unser Schwerpunkt auf der längerfristigen, noch laufenden Quartalsarbeit lag.

Auf der Front-End-Seite haben wir einige Folgekorrekturen an den UX-Komponenten zur Verwendung von Lexemen (T373589) vorgenommen, die dir die Suche nach Lexemen mit einer einzigen Glyphe (wie '𒂼', was L1 ist) ermöglichen und die visuelle Anzeige optimieren.

Wir haben außerdem die von uns beim Ausführen einer Funktion generierten Anfrageverfolgbarkeits-Header verbessert und diese im Rahmen umfassenderer Arbeiten zur Wikimedia-Beobachtung auf dem OpenTelemetry-Standard konsolidiert (T375922).

Funktion der Woche: Repräsentation aus Lexem auswählen

Abb. 1. Auswahl eines Lexems für "goose"
Abb. 2. Eingabe der QID für die grammatikalische Funktion "Plural"

Wie wir letzte Woche geschrieben haben, führen wir Wikidata-Lexeme und erste Versionen anderer Wikidata-basierter Typen ein. Die neuen Typen sind jetzt verfügbar, und um die neuen Typen und ihre Funktionsweise zu demonstrieren, haben wir einen ersten Satz Funktionen erstellt:

  1. Lexem-Formen in Lexem zählen
  2. passende Lexem-Formen in Lexem zählen
  3. Repräsentation aus Lexem auswählen
  4. passende Lexem-Formen in Lexem auswählen

Alle diese Funktionen verwenden den neuen Typ Wikidata-Lexem als erstes Argument. Wenn du eine dieser Funktionen aufrufst, stellt unsere Benutzeroberfläche einen Lexem-Selektor bereit, der dir hilft, ein Lexem aus Wikidata auszuwählen, das dem von dir eingegebenen Wort entspricht. Nachdem du auf Ausführen geklickt hast, wird dein ausgewähltes Lexem aus Wikidata abgerufen und in unseren Wikidata-Lexem-Typ umgewandelt (durch einen vorbereitenden Aufruf der neuen integrierten Funktion erhalte Wikidata-Lexem) und dann an die oben ausgewählte Funktion übergeben.

Schauen wir uns eine dieser neuen Funktionen genauer an: Repräsentation aus Lexem auswählen.

Diese Funktion hat auch ein zweites Argument, grammatikalische Funktion, das eine Liste von Wikidata-Datenobjekt-Referenzen ist. Derzeit haben wir noch keine UI-Komponente zum Auswählen von Wikidata-Datenobjekten, aber das ist Teil unserer bevorstehenden Arbeit in diesem Quartal. Du kannst jedoch eine QID für grammatikalische Funktionen aus Wikidata kopieren und einfügen. Wenn du eines oder mehrere grammatikalische Funktionen angibst, werden diese verwendet, um die Lexemform(en) aus dem Lexem auszuwählen, die diese grammatikalischen Funktionen aufweisen.

Sehen wir uns ein einfaches Beispiel an: Wir möchten die (erste) Pluralform des englischen Nomens "goose" erhalten. Wir geben "goose" in den Lexem-Selektor ein und klicken auf die Auswahl "English, noun" (Abb. 1). Im zweiten Argument klicken wir auf die Schaltfläche "+" und geben Q146786 ein, die QID für Plural (Abb. 2). Dann klicken wir auf "Funktion ausführen" und erhalten die Pluralform zurück (Abb. 3).

Dies ist auch der erste Test für die Funktion. Ein zweiter Test prüft, ob der Plural im Nominativ des Worts ആപ്പിൾ in Malayalam (mit der Bedeutung Apfel) ആപ്പിളുകൾ ist. Dieser Test dient dazu, eine andere Schrift und ein komplexeres Lexem zu prüfen.

Im Allgemeinen kann es schwierig sein, Tests für einige dieser Funktionen zu schreiben, da sie auf eine gewisse Stabilität von Wikidata angewiesen sind. Beim Schreiben von Tests sollten wir eine sorgfältige Entscheidung darüber treffen, was genau wir mit einem bestimmten Test prüfen.

Die Funktion hat derzeit eine Implementierung, die in JavaScript geschrieben ist. Die Implementierung kann überprüft und als Muster für andere Implementierungen verwendet werden. Aber diese Funktion ist vollständig im Bereich der Beitragenden implementiert (im Gegensatz zur Funktion erhalte Wikidata-Lexem, die eine magische integrierte Implementierung hat und sicherlich Dinge tut, die Beitragende nicht tun können).

Hier ist ein weiteres Beispiel für die Verwendung dieser neuen Funktionen: Wenn du die Lexem-Formen eines Lexems untersuchen möchtest, verwende passende Lexem-Formen in Lexem auswählen. Gib ein Wort in den Lexem-Selektor ein und wähle eine der angebotenen Optionen aus. Wenn du das zweite Argument nun als leere Liste belässt, erhältst du alle Lexem-Formen des ausgewählten Lexems zurück (Abb. 4). Anschließend kannst du sie dir in Wikifunctions ansehen.

Beachte, dass wir derzeit einige Fehler haben: Wenn zwei oder mehr Auswahlmöglichkeiten mit genau derselben Wortform angezeigt werden, wird immer die erste davon ausgewählt, egal, auf welche du klickst. Außerdem verursachen größere Lexeme beim Laden ein Gateway-Timeout. Und nur bei der Auswahl von QIDs haben wir auch noch keine richtige Anzeige für QIDs. Wenn du auf weitere Probleme stößt, lass es uns bitte wissen.

Weitere Informationen zu den Möglichkeiten von Wikifunctions für die Arbeit mit Wikidata und zum Status geplanter Funktionen sind unter Wikifunctions:Support for Wikidata content verfügbar.

Abb. 3. Die abgeschlossene Ausführung von "Repräsentation aus Lexem auswählen"
Abb. 4. Teil eines Ergebnisses aus dem Aufruf von "Lexem-Formen aus Lexem auswählen"