Reboot: Le P'tit Aurèle (lexicon of the French-Acadian language)

This little passion of mine took a serious backseat to other interests over the last several years.

To hopefully rekindle my interest in the thing, I’ve decided to rebuild everything from scratch, starting with a focus on redesigning the data-entry interface.

Just in case anybody else is interested in this for whatever reason, I’ll occasionally update this thread with progress and interesting challenges (and/or design decisions, etc.).

7 Likes

The old one looks quite useful and usable to me. I’ll be excited to see where your improvements take you!

I’m pretty sure the viewer interface will be the similar or same, but I may refactor things if the mood strikes me.

The primary focus is all about major improvements to data entry. With a keen eye on revisiting data structures to better fit the complexity of the domain.

Something like that.

(Since I live in an officially bilingual province, French and English, I’m setting up the interface to be bilingual.)

The (initially bare-bones) interface for viewing the list of words in the dictionary and adding words:

The “Add a Word” dialog:

The “Word Details” dialog in “View mode”:

The “Word Details” dialog in “Edit mode”:

First filter setup:

image

image

A design decision.

All nouns having a gender, there are some nouns that have a matching noun for the opposite gender.

I’m not going to have distinct tiddlers for each gender. Each gender will share the same tiddler.

However, each word will have a distinct link in the dictionary, but words that are just opposite genders will link to the same tiddler.

For example, in the case of “darnier” (meaning: the last one in a group, of a masculine gender) and “darniére” (meaning: the last one in a group, of a feminine gender), the words are both in the same tiddler, but each word appears distinctly in the dictionary, and their links bring up the same tiddler:

The word details dialog needs to handle scenarios of masculine + feminine pairs and words that are not paired with a word of the opposite gender:

1 Like

This makes sense. Are the entries in the dictionary tiddler simply extracted from existing tiddlers?

Also, will you have a similar process for different conjugates of a verb? (E.g. vais, vas, va, allons, allais, vont…)

A little early to figure out verbs. Pretty sure the conjugation of verbs will all be fields in one tiddler. Which tiddler? Likely the same tiddler as the one describing the word.

Right now, I’m locked into this design quagmire using “darnier” (standard French: dernier) as an example: darnier is a noun, but is also an adjective. I want a tiddler for the noun, and a distinct tiddler for the adjective. However, both have some things in common (for example: Phonetic attributes), which I’d rather have only existing once (so a shared tiddler).

Since I’ve got a shared tiddler for the phonetic side of things, it would also make sense to have a shared tiddler for the feminine form of the word, which is also the same for the noun and the adjective.

Good stuff to chew on.

I don’t know if you’re looking for input on this design decision. If not, feel free to ignore the rest of this message and ask me to shut up. :slight_smile:

It sounds like you might have a common many-to-many relationship between word tiddlers and phonetic ones. I don’t know how common heteronyms are in French; they’re not particularly rare in English (“For the record, I’m going to record this conversation.”)

But I could image

title: p/12345
tags: Phonetic
pronunciation:/dɛʁ.nje/

More phonetic info

and then using templates to pull things together.

title:w/dernier
caption: dernier
tag: Word
gender: masculine
part-of-speech: noun

All about dernier
title: wp/8675
tags: Word-Phonetic-Link
word: w/dernier
phonetic: p/121345

It’s always good to have stuff to chew on.

Yup, it is “many to many”, but it is pretty easy.

We have a known word: darnier. That word has certain attributes that are common regardless of the word context.

That word is in a tiddler.

The word has two word contexts: one context as a noun, the other as an adjective. Each one of those contexts has certain attributes related to the context. Each one of these contexts has a tiddler. Both of them are children of the word.

In either context, the phonetic attributes are the same. What is the same regardless of context sits in the word tiddler.

A phonetic context (for example: “êr” sound becomes “ar”) is indeed something that applies to many words. So that phonetic context exists in a tiddler, linked to however many words have that phonetic context. (examples: darnier, farmier, pardre, varte, barceau … all of these “er” letters replaced with “ar”).

The phonetic context will be linked to a word by tagging the word with the context. Each context for a word will be linked to that word via a tag for that word.

Something like that.

Now that I’ve had some time to reacquaint myself with my old project and some of the design challenges (playing around with some elements in the new incarnation of the project), time to do a little bit of domain analysis.

For that, I’m using TreeSheets.

1 Like

“Word Type Instance” tiddler, I don’t like the moniker at all.

A group of words defined together in one tiddler, I think I want to call that a “Word Ensemble” tiddler. Because it is a little bit like an “ensemble cast”.

1 Like

A design decision.

When entering a new word in the dictionary, I’ll normally want to plough right into entering the details for the word.

However, when I want to just enter a whole bunch of new words and deal with word details later, I want the option to do that.

So, the “Ajoutez un mot / Add a Word” dialog no looks like this:

When the checkbox is left unchecked, clicking the “Enregistrer / Save” button will close the current dialog and open up the Word editing dialog right away.

However, when the checkbox is checked, I can repeatedly add words without the dialog closing, and each word added (in this “batch” process) is displayed so I can keep track of where I’m at.

The no fuss no muss prototyping code if you are interested:

<table style="border:none;">

<$checkbox tiddler={{$:/temp/BatchAddWords!!title}} field="text" checked="stay_open" unchecked="" default=""> Je souhaite saisir plusieurs nouveaux mots. / I want to enter multiple new words.</$checkbox>


Nouveau Mot / New Word:
<$edit-text tiddler="$:/temp/NewTiddlerName" field="text" tag="input" default=""/>

<$let wordValidate={{{ [{$:/temp/NewTiddlerName!!text}is[blank]then[BLANK]] [{$:/temp/NewTiddlerName!!text}is[tiddler]then[EXISTS]] +[else[OK]] }}}>

<div style={{{ [[text-align:center;border:3px dotted ]] [<wordValidate>match[OK]then[green]else[red]] [[;]] +[join[]]}}}>
//<$text text={{{ [<wordValidate>match[BLANK]then[Aucun mot saisi.]] [<wordValidate>match[OK]then[C'est un mot qui peut être ajouté.]] [<wordValidate>match[EXISTS]then[Ce mot existe déjà.]] }}}/><br>
/ <$text text={{{ [<wordValidate>match[BLANK]then[No word entered.]] [<wordValidate>match[OK]then[That is a word that can be added.]] [<wordValidate>match[EXISTS]then[That word already exists.]] }}}/>
//
</div>


<div style="text-align:center;">
<$button disabled={{{ [<wordValidate>match[OK]then[no]else[yes]] }}}>
<$action-createtiddler $basetitle={{$:/temp/NewTiddlerName!!text}} tags="mot">
<!-- <$action-sendmessage  $message="tm-modal" $param={{Détails de mot / Word Details!!title}} wordTiddler=<<createTiddler-title>>/>  -->
<$action-setfield $tiddler="$:/temp/NewTiddlerName" added_words={{{ [{$:/temp/NewTiddlerName!!added_words}!is[blank]] [{$:/temp/NewTiddlerName!!text}] +[join[, ]] }}}/>
</$action-createtiddler>
<$action-setfield $tiddler="$:/temp/NewTiddlerName" text=""/>
<$list variable="check" filter="[{$:/temp/BatchAddWords!!text}!match[stay_open]]"> <$action-sendmessage $message="tm-close-tiddler" $param=<<currentTiddler>>/> </$list>
✔ Enregistrer / Save
</$button>
<$button>
<$action-sendmessage $message="tm-close-tiddler" $param=<<currentTiddler>>/>
❌ Annuler / Cancel
</$button>
<br><br>
<hr>
<$list variable="check" filter="[{$:/temp/BatchAddWords!!text}match[stay_open]]">

  !! Mots ajoutés / Added Words
__Dans l'ordre saisi / In the order entered__<br>
 {{$:/temp/NewTiddlerName!!added_words}}<br>

__Trié par ordre alphabétique / Sorted alphabetically__<br>
<$text text={{{ [{$:/temp/NewTiddlerName!!added_words}split[, ]sort[]join[, ]] }}}/><br>
 </$list>

</div>

</$let>

</table>
1 Like

To filter the list of words in the dictionary, I sometimes want to see only those words that start with a particular letter. This has to take into consideration words that start with accented characters. I’m treating all accented characters as their unaccented versions:

For anybody interested, the code for this tiddler:

<!-- 🟠 Filters -->
<details><summary>Filtrer / Filter</summary>

<!-- 🟠🟠 Alphabetic Filter -->
<fieldset><legend>Groupes alphabétiques / Alphabetic groups</legend>
<$tiddler tiddler="$:/temp/WordAlphaGroupFilter">
<$button><$radio field="text" value="" default=""> Tous les mots / All of the Words </$radio></$button>
<hr>
<details open><summary>Mots commençant par la lettre sélectionnée / Words starting with the selected letter</summary>
@@.multicol_thin
<ul style="list-style-type:none; padding:0; margin:0;">
<$list variable="thisLetter" filter="[[a|ä|à|â,b,c|ç,d,e|ë|è|é|ê,f,g,h,i|ï|î,j,k,l,m,n,o|ö|ô,p,q,r,s,t,u|ü|ù|û,v,w,x,y,z]split[,]]">
<li><$button class="wide100"><$radio field="text" value=<<thisLetter>> default=""> ''<$text text={{{ [<thisLetter>split[]first[]uppercase[]] }}}/>''</$radio></$button></li>
</$list>
</ul>
@@
</details>
</$tiddler>
</fieldset>
<!-- 🟠🟠 Types Filter -->
<br>
<fieldset><legend>Types de Mots / Word Types</legend>
<$tiddler tiddler="$:/temp/WordTypeFilter">
<$radio field="text" value="" default=""> Tous les types de mots / All of the Word Types</$radio>
<hr>
<$list variable="thisWordType" filter="[[WordTypes]indexes[]sort[]]">
<$radio field="text" value=<<thisWordType>> default=""> <$text text={{{ [[TypesDeMots]getindex<thisWordType>] }}}/> / <$text text={{{ [[WordTypes]getindex<thisWordType>] }}}/></$radio><br>
</$list>
</$tiddler>
</fieldset>

</details>

<$button>
<$action-deletetiddler $tiddler={{$:/temp/NewTiddlerName!!title}}/>
<$action-sendmessage  $message="tm-modal" $param={{Ajoutez un mot / Add a Word!!title}}/>
Ajoutez un mot / Add a Word
</$button>

<hr>

<$let allAlpha="[tag[mot]🔤]"
         oneAlpha={{{ [{$:/temp/WordAlphaGroupFilter!!text}!is[blank]then[filter<oneAlphaFilterOp>]] }}}
         baseSort="+[sort[]]"
         oneAlphaFilterOp="[split[]first[]lowercase[]regexp{$:/temp/WordAlphaGroupFilter!!text}]">


@@.multicol_keywords
<ul style="list-style-type:none; padding:0; margin:0;">
<$list filter={{{ [<allAlpha>search-replace[🔤],<oneAlpha>] [<baseSort>] + [join[ ]] }}}>
<li style="border-left:1px solid lightgray;">
<$button class="tc-btn-invisible tc-tiddlylink">
<$action-sendmessage  $message="tm-modal" $param={{Détails de mot / Word Details!!title}} wordTiddler=<<currentTiddler>> formMode="VIEW"/>
<<currentTiddler>>
</$button>
</li>
</$list>
</ul>
@@

</$let>

<hr>

Many Acadian French words are the Standard French words pronounced differently.

Some words might actually be spelled differently to reflect the different pronunciation, but some words might retain the spelling of the Standard French word and simply be pronounced the Acadian French way.

I’ll be setting up the dictionary so that words are spelled as they are pronounced by a native Acadian French speaker. For those words, I’ll be doing two things: also store the word as spelled in Standard French, and include “notations” to explain the phonetic transformations going on, tagging words with one or more of the applicable Phonetic Aspects going on.

For example: recule (meaning “back up”)

In Acadian French, the pronunciation of that word is “ertchule”. The “re” flipped to “er”, and the “c” (the “k” sound) replaced with the “tch” (like the “tch” in the word “itch”)

Eventually, all of these Phonetic Aspects will be properly documented. For now, I’ve just got a basic directory of them setup:

Okay, next, setup phonetic aspect tagging.

re Phonetic Aspects, a little bit of cleanup for a smaller initial list which I can increase if and when needed.

I also added icons to (I hope) make it clear what the phonetic transformations mean.

image

For example, " :loud_sound:vwar→ :loud_sound:wèr", tagging the word “saouaire”

“saouaire” (the typical French-Acadian spelling) is the pronunciation of the Standard French word “savoir”

To keep things simple (i.e not using the symbols of the international phonetic alphabet), the phonetic representation of “ouaire” is “wèr”, and the phonetic representation of “voir” is “vwar”.

So “saouaire” is the phonetic transformation ( :loud_sound:vwar→ :loud_sound:wèr) of the word “savoir”.

Yeah, I seriously geek out on this kind of stuff …

A word that has “Phonetic Aspect” tags.

Dialog in view mode:

Dialog in edit mode:

Although I haven’t yet setup the data-entry GUI elements, I now have the architectural elements setup to identify 1 or more definition “ensembles” for a word.

A word may have multiple definitions, and for each definition a related word type.

Each definition is an “ensemble” because the definition may apply to more than one word (for example: same definition applicable to the different genders for a word, like “beau” and “belle”, for example.

For verbs, the definition of that verb might be an ensemble that applies to all of the conjugations of that verb.

Something like that.

In the example below, the word “darnier” can mean the adjective word type, or might mean the noun word type. In both ensembles, “darnier” is the masculine version of the word, and “darniére” is the feminine version of the word .

When we view the word details of either “darnier” or “darniére”, we see the relationship between these two words via their common definition ensembles.

Huh, managed to make a little bit of progress while watching the hockey game.

Enhanced, just a little, the info about words that are part of the ensembles.

And, when editing, added (1) ability to add more word-type-related ensembles and (2)ability to manage the words included in the ensembles