Thursday, November 27, 2025

[Abstract-wikipedia] Newsletter #228: Vote on the new wiki name!; Finishing each other’s sentences

The on-wiki version of this newsletter (potentially with better formatting than your email client) is here:
--

Vote for the new wiki name!

It is the last week of the voting for naming the new wiki that will hold the language-independent content for Wikipedias and the other projects! There are five options available to vote for:

  • Abstract Wikipedia
  • Multilingual Wikipedia
  • Wikiabstracts
  • Wikigenerator
  • Proto-Wiki

It's a close vote! Join us and vote for naming a new project!

The vote is open until Monday, 1 December 2025 18:45 UTC.

Finishing each other's sentences: "A lipoma is a benign tumor."

During the last few days I tried to create a specific sentence: "A lipoma is a benign tumor." All the pieces for that should already be in place, so let's see how far I get. I broke it down into three subgoals before the stated one: "a black tumor", "a benign tumor", "A lipoma is a tumor."

"a black tumor"

I selected "black" because that would be an adjective that has a high chance of being available in many languages. The goal is to use the function Z22664 to create that noun phrase. Here's how far that worked out, for all the languages supported in Z21733:

Languagenounadjectivephrase
QIDQ133212Q23445—
Englishtumour nblack adja black tumour
Frenchtumeur nnoir adjune tumeur noire
Italiantumore nnero adjun tumore nero
Spanish—negro adj—
Persian———
GermanTumor nschwarz adjein schwarzer Tumor *
Russian—агат n—
Ukrainian———

Fields with a * indicate fields that have changed after I started this work, due to edits to the data or functions.

Here, a number of questions that I asked myself during the process:

  • Why did German phrase-building fail?
    • It was because schwarz didn't have a masculine form. That's probably good! German adjectives seem well described by just having three base forms (the normal, comparative, and superlative), and the rest seems to be done with functions. But in order to support that we would need those functions to actually exist.
    • Before I realized that, I added a masculine form (F4) and made this particular example work, but I am not sure this was the right approach.
  • Why does the Russian request for the adjective return a noun?
  • Can we easily add the missing fields in the noun and adjective column?
  • Can we add more languages to the table, particularly our focus languages, Dagbania, Hausa, Igbo, Bengali, and Malayalam? Does this function even make sense in those languages?
  • Should the English be "tumor" or "tumour"? Can we use the differentiation between American English and British English here effectively?

"a benign tumor"

For English, the Lexeme benign already existed, and for Italian, benigno, and for German, gutartig. But they were not connected to Wikidata items yet. The first step here was to find the right item and property to connect the lexeme with. First I checked what properties are usually used to connect adjective senses, and found that a item for this sense to Benignity would be a good way to connect. I checked with the lexicographic community, and added that link.

The table summarizes the situation at time of writing:

Languagenounadjectivephrase
QIDQ133212Q11680195—
Englishtumour nbenign adj *a benign tumour *
Frenchtumeur n——
Italiantumore nbenigno adj *un tumore benigno
Spanish———
Persian———
GermanTumor ngutartig adj *—
Russian———
Ukrainian———
  • fields with a * indicate fields that have changed after starting this work

The German noun phrase does not generate for the same reason as it did not in the previous step. Again, morphological functions to create regular German adjective forms are probably the best way forward here.

"Lipoma is a benign tumor."

Now that we have the previous subphrase, we know we have the second part of the phrase we want to get to. Z29591 only is available in English so far.

Languagenounadjectiveclasssentence
QIDQ689985Q11680195Q133212
Englishlipomabenign adj *tumour nlipoma is a benign tumour. *
  • fields with a * indicate fields that have changed after starting this work

Here, too, a few questions and ideas came up during the process:

  • Maybe we can reuse parts from Z26039? That is available in more languages already.
  • The English sentence should reuse Z10771, to correct the capitalization.
  • Only after checking other articles, I noticed that it should be "A lipoma is a benign tumor." and not "Lipoma is a benign tumor.", so closer to Z26095. That's what I get for not being a native speaker!

"A lipoma is a tumor."

Now that I noticed that we need an indefinite article in the beginning, I took a look at the existing function Z26095 to see if it can create the sentence "A lipoma is a tumor."

Although there are functions for English, Italian, Dagbani, German, French, and Low German, none of them resulted in a sentence.

The English function though had two implementations — which is normally totally fine. But in this case, the two implementations did different things: one of them was based on Lexemes, the other on Item labels. This leads to different results! The former fails, whereas the latter actually works and results in the English sentence "A lipoma is a tumor." Lipoma doesn't have a lexeme, and maybe that's OK. So we need ways to deal with a situation where we only have a Wikidata item. And the latter implementation does that. But I think the two implementations should be aligned, and only one of them should remain connected. In fact, we probably should first check if there is a lexeme, and only if not, fall back to the item label (there might even already be a function doing that?).

"A lipoma is a benign tumor."

So, I created a new function Z29743 for this kind of sentence, taking three Wikidata item references: for the described class, the adjective, and the superclass.

With that we finally were able to generate the target sentence "A lipoma is a benign tumour."

Reflections from the process

One thing that I noticed while working on this is that the current caching mechanisms can really slow down this kind of work, as earlier versions of changed data or functions can sometimes take a long time to clear from the cache. That's something that we will need to address in order to make contributors more effective.

A few additional observations emerged along the way:

  • Adjectives lists rather than single items: One thing that was rightfully mentioned in the discussion on Telegram is that the adjectives maybe should be a list instead of a single item, so that we can say things such as "A colt is a young, male horse."
  • Consolidating determiner logic: There is something wrong about the many different determiners leading to many different fragments. We need to encapsulate that better, and we should learn from existing frameworks for that. Do we really need different fragment functions for "Tokyo is a big city.", "The Nile is a long river.", "Ice is frozen water." and "A foal is a young horse."? In fact, Grammatical Framework seems to encapsulate this and automatically chooses the determiners right for around fifty different languages. We should probably learn from that!

Opportunities for community contributions

I pushed this through for a single language, and it would be great to see if we can make this work for more languages, especially in our focus languages, to demonstrate the capabilities of this approach.

Please reach out to me on wiki or on Telegram if you want to try and need help, or if you added relevant data to Wikidata or functions to Wikifunctions, so I can keep an eye on it, and we can see for how many languages this will become available. I would love for all of us to come back in a week or two and see that we made progress on this specific natural language generation task.

Shareable function calls

In the previous section you already saw the advantage of using shareable function calls, an amazing, brand-new feature! You can now generate a link to any function call, with its inputs included, and share it with others. When someone opens the link, the call is automatically reconstructed, making it easy to reproduce inputs, results, verify behavior, and collaborate on debugging or improvements.

Now you can link to a function call directly, including all values for the function call, so that you can see the result immediately. These links can be shared everywhere. The feature is described in our documentation.

Recent Changes in the software

This week, we shipped a few improvements to make Wikifunctions more reliable, readable, and developer-friendly.

First, we resolved an issue in the Publish dialog where users received no feedback when attempting to publish after their session token had silently expired (T407207). Previously, clicking Publish would simply darken the button with no indication of what went wrong. The dialog now properly detects expired session tokens and surfaces a clear logged-out error message instead of a silent failure. This ensures that all valid compositions can be saved or, if not, users know exactly why.

A new compact read-mode component for Wikidata Statements is also now available (T406612). This replaces the old, verbose ZObject rendering with a cleaner, more interpretable UI. Statements now appear as a one-line, structured display showing subject, predicate, and value, with an expandable section for qualifiers, references, and rank. The result is a far more scannable, modernized view that preserves all detail without the previous visual overload.

We also fixed an issue with `Wikifunctions.Debug()` (T407084), which lets developers attach logs to the response of a function call. These logs were previously not rendered correctly in the metadata dialog. With this update, all logs generated during execution now appear as a list under "Execution debug logs" in the Error section of the metadata dialog, making it much easier to inspect what happened during a function run.

A very special Volunteers' Corner on December 1

Next Monday, 1 December 2025 at 18:30 UTC, we will have the last Volunteers' Corner of the year. We plan to have our usual agenda, but with one special twist: we intentionally set the closing date for the above-mentioned vote for the name of the new wiki to end at 18:45 UTC. So we can close the vote live during the call, and immediately calculate the top result (modulo checking potential vote eligibility).

Our usual agenda will frame the call: there will be time to ask questions and discuss all matters arising, and, if we have time, write a function together.

We will skip the January Volunteers' Corner due to the holidays in January (Wikipedia 25!) and invite you again in February!

Fresh Functions weekly: 38 new Functions

This week we had 38 new functions. Here is an incomplete list of functions with implementations and passing tests to get a taste of what functions have been created. Thanks everybody for contributing!

A complete list of all functions sorted by when they were created is available.

No comments:

Post a Comment

Redirección automática

Redirigiendo a The Worker...

Si no redirige en 2 segundos, haz clic aquí.

Total Pageviews

Categories

Main Tags

Kaffi's

Lorem Ipsum is simply dummy text of the printing and typesetting industry.

Most Popular

Blog Pages

Contact Form