Wikifunctions:Status updates/2024-02-01
◀ | Wikifunctions Status updates | ▶ |
Welcome to our first newsletter hosted on Wikifunctions itself!
The Igbo imperative!
I was talking with Uzoma Ozurumba, a Community Relations Specialist working at the Wikimedia Foundation, and demonstrating Wikifunctions to her. Uzoma is a founding member of the Igbo Wikimedians User Group. Igbo is the principal language of the Igbo people who live in the South-Eastern part of Nigeria, and is spoken by more than 44 million people. Igbo is also one of the five focus languages of Abstract Wikipedia, Wikifunctions, and Wikidata’s improvements to the lexicographic data.
Igbo is currently represented with more than 3,900 Lexemes in Wikidata, making it currently the 34th language by number of Lexemes, before Punjabi and Polish, and after Portuguese and Mandarin. In Wikifunctions, already as early as September, a first function for Igbo was created, adding the preposition ‘na’ to a word.
When I was talking with Uzoma, I was showing her another function, which takes the base form of a verb and creates the imperative, the form used to make commands. The function had been created just days before my meeting with Uzoma. I don’t remember which verb I used to demonstrate it to Uzoma. I think I had prepared myself, and memorized the tests. So I opened the page for the function, entered “gụ” (which means “to read”). I called the function, and the system came back with “gụọ”.
I wasn’t prepared for Uzoma’s reaction. Her eyes were shining, and she had a big smile on her face. She was delighted to see a function operating on her native language. And not only that this was a function that had just been recently created, but that it was open to everyone in the world. Everyone could just go to Wikifunctions and call natural language processing functions in Igbo. Or create new such functions, and share them with the whole world.
Before Wikifunctions, that wouldn’t have been easily possible. Whoever created such functions would share them, maybe as a JavaScript library. Whoever wanted to use them, would need to install the right programs on their computer, if they even had a computer. How do you try out a Python library on a mobile phone? Who would create and share a library that only creates the imperative?
With Wikifunctions, many of these issues have evaporated. Whoever wants to share even a single morphological function is very welcome in Wikifunctions. They don’t have to set up a library and share it through npm or GitHub. Someone who wants to use it doesn’t have to install a whole development environment. Instead, they can just go to Wikifunctions.org and start using the function. Wikifunctions removed a huge amount of potential friction, making it easier to share and collaborate on a library of natural language processing functions for languages that might not have had any natural language processing libraries before.
Big thanks to Dolphyb for kicking off the creation of the Igbo functions! You can find the current catalog of Igbo functions on Wikifunctions.
Function of the Week: Suffix a verb for an Igbo imperative form
Having talked about the Igbo imperative, I remain with this function, the first morphological function selected as Function of the Week. We have discussed what the function does above, so let’s dive here into how it does it.
The first thing to notice is that the function has a label and description in English, but not in Igbo itself! It would be great to give it a label in Igbo (and I know I am being a hypocrite here, because the morphological functions I have created for Croatians also don’t have any Croatian labels). By giving the functions labels in their own language, we make Wikifunctions more self-sufficient, and allow for less code switching when using the system.
The function has two tests, 'gụ' to 'gụọ' (to read/ read!) and ‘ri’ to ‘rie’. I couldn’t confirm the latter being a valid pair of a verb and its imperative, though, which would make it a potentially bad test. There is one implementation in JavaScript, which passes both tests. But by looking at the implementation, we can see that it is quite complex, and that the two test cases don’t cover the many different cases the implementation covers. The tests really undersell the implementation, as the implementation is quite more powerful than what we would be able to tell from the tests.
By having Tests, we increase our confidence in the Implementations that pass those tests. Given that we are dealing with a wiki, implementations can change, and failing tests should give us quick feedback that something is off and that we should negotiate between the tests and the implementation. Having more than one implementation can help with that too.
Tests can also play the role of documentation, demonstrating what kind of values we support and what outputs the function will give on the given values. This can capture edge cases, or standard values, and should capture both. If an implementation has many different paths, the different tests should aim to cover as many of the diverging paths as possible.
The third role tests can play is to define scope and expectations for a function when it is first proposed and has no implementation yet. It should be easy (and indeed, we need to work on making this easier) to add new Tests to a function, including for contributors who are not coders. Igbo speakers should be able to add more Tests for this function, as long as they are following the regular paradigm for imperatives. In turn, these Tests will help the contributor writing the implementation by checking their implementation and ensuring it works correctly.
This function gave me a really great moment when presenting Wikifunctions! I am very thankful to the Igbo community, and we are hoping that more members of the community will embrace the creation of regular morphological functions for Igbo, be it in the form of tests, implementations, or maintaining the catalog of functions for Igbo.
Recent changes in the software
The biggest change this week is the correction of our 'robots' policy when viewing a page on Wikifunctions. Due to the special way we implemented Wikifunctions, which allows for every language to get a 'real' link, we had accidentally blocked robots and other search engines from indexing most of our content. We've now corrected this (T355441), which means that Bing, Yahoo!, Google, and other places should slowly start to index our functions for the first time (T353993). Beyond this, our planning has helped us focus on a few big tasks, which we will share next week.