declensionNounForms only tested hardConsonant (d t g h k n r), so the neutral
consonants (b f l m p s v), which take the hard endings, matched nothing and
fell through to the soft declSTROJ fallback: graf, atom, profil, přístup were
all declined as if soft. Same gap in guessNounForms. Add hardishConsonant
(hard + neutral + the foreign z, x) and use it in both.
The genitive passed to the three-argument mkN was only used to pick a
paradigm, then thrown away, so the oblique stem was re-derived from the
nominative by dropFleetingE. That guesses wrong in both directions: it fires
on člen -> člnu, and fails to fire on uzel -> uzelu, doplněk -> doplněku,
výpočet -> výpočetu. Give declHRAD, declHRADA and declMUZ stem-taking
variants and let declensionNounForms pass the stem it was given. The
one-argument guessNounForms keeps the old dropFleetingE behaviour.
New paradigms, all previously falling back to declSTROJ:
declLATINUS algoritmus - algoritmu, kosmos - kosmu (also -os)
declLATINUSA the same, masculine animate
declLATINUM kontinuum - kontinua
declGREEKMA schéma - schématu
declHRADA les - lesa, zákon - zákona
declADJF proměnná - proměnné
declADJM nultý - nultého
declINVAR indeclinable loans: bombé, tamari, software
Also match feminine consonant stems by genitive (-i -> kost, -e/-ě -> píseň),
masculine -e/-ě genitives (kužel - kužele, král - krále), and neuter -ě
(těžiště), none of which were reachable before.
Measured on the 1177 nouns of informath's WikidataWordsCze: 225 hit the
fallback before, 1 after (the acronym ADE).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
The Czech resource was too incomplete to compile a Syntax/Grammar client:
Sentence, Idiom and Question defined almost nothing, and many Structural
words were absent, so MissingCze's notYet stubs were reached at PMCFG
generation time.
Added:
CatCze lincat VV
SentenceCze AdvS, ExtAdvS, SSubjS, EmbedS, EmbedQS, ImpVP
IdiomCze ImpP3, ExistNP, ImpersCl, GenericCl
VerbCze CompCN, ComplVS, ComplVV, PassV2
NounCze SentCN, PredetNP
AdverbCze SubjS
QuestionCze QuestIAdv
PhraseCze UttImpSg, UttImpPl, UttImpPol
StructuralCze all_Predet, both7and_DConj, between_Prep, by8means_Prep,
can_VV, either7or_DConj, every_Det, if_Subj, no_Quant,
on_Prep, someSg_Det, that_Subj, under_Prep, where_IAdv
ExtendCze ExistsNP no longer excluded
Three of these approximate, because VerbForms lacks the required forms:
ImpVP uses the 1st person plural present ("předpokládáme, že ...") as there
is no imperative; PassV2 uses the reflexive passive ("číslo se dělí") as
passpart is commented out in ResCze; ImpP3 uses "nechť", which suits
mathematical text more than the "let John walk" of the RGL example.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
MarkupNP marks s, clit and prep, since in Czech these are alternative
surface forms of a pronoun chosen by context, as in MarkupRomance.
The nominative clitic is left alone: it is the pro-drop subject, empty
for every personal pronoun, so marking it up gave "<b> </b> je starý".
Inherit MarkupCze in LangCze, as LangFin does; stringMark is excluded
because abstract Lang already excludes it.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Implement the remaining Symbol functions, which previously fell back to
GF's default linearization: IntPN, FloatPN, NumPN, CNNumNP, CNIntNP,
CNSymbNP, SymbS, SymbNum, SymbOrd, and the [Symb] list.
Symbols and numbers are indeclinable neuters, but a cardinal used as a
name still declines (NumPN). CNNumNP treats the numeral as an invariable
label, so the noun carries the case: "město / městu / městem pět".
CNSymbNP goes through numSizeForm and numSizeAgr, as DetCN does, so
SymbNum's Num5 size gives "n měst x a y je staré".
SymbOrd is only approximate: CatCze has no lincat Ord, so it defaults to
{s : Str} and the masculine "n-tý" cannot agree.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>