Commit 0d2c8f60 authored by Stanislav Horáček's avatar Stanislav Horáček

Merge branch 'master' into 'master'

Added lexeme generator

See merge request !1
parents 68908a66 1eb543b2
......@@ -70,7 +70,7 @@ Scházející slovo snadno přidáte do Wikidat (tam navíc bude užitečné nej
1. Ujistěte se, že se slovo na Wikidatech ještě nenachází, např. pomocí
[vyhledávání na stránce Ordia](https://tools.wmflabs.org/ordia/).
2. Vytvořte nové slovo, v terminologii Wikidat „lexém“, pomocí [příslušné stránky](https://www.wikidata.org/wiki/Special:NewLexeme) nebo použijte [přívětivější šablony](https://tools.wmflabs.org/lexeme-forms/); ty jsou však dostupné jen pro některé české slovní druhy.
2. Vytvořte nové slovo, v terminologii Wikidat „lexém“, pomocí [příslušné stránky](https://www.wikidata.org/wiki/Special:NewLexeme) nebo použijte [přívětivější šablony](https://tools.wmflabs.org/lexeme-forms/) či náš [generátor](generator.html); tyto jsou však dostupné jen pro některé české slovní druhy.
Pokud je potřeba doplnit nové tvary k již existujícímu základnímu tvaru, upravte stránku s lexémem, případně u šablon použijte volbu „Pokročilé“.
......@@ -86,7 +86,7 @@ Nejdřív zkontrolujte, zda se nesprávné slovo nenachází na Wikidatech, a ta
### Další možnosti
Obohatit Wikidata a vylepšit slovník můžeme i jinak. Také tyto činnosti vyžadují pokročilejší znalosti:
- zadávání nových a úpravu stávajících lexémů by usnadnily nové [šablony](https://tools.wmflabs.org/lexeme-forms/) pro češtinu, schází namátkou šablona pro slovesa nebo stupňovaná přídavná jména,
- zadávání nových a úpravu stávajících lexémů by usnadnily nové [šablony](https://tools.wmflabs.org/lexeme-forms/) pro češtinu, schází namátkou šablona pro nedokonavá slovesa,
- hunspellový slovník je aktuálně tvořen prostým seznamem všech tvarů, přidání pravidel (vzorů) by nejen zmenšilo výsledný soubor, ale především by se tím do slovníku dostala informace o skloňování a časování,
......@@ -104,4 +104,4 @@ U slov ve Wikidatech, odkud slovník přebírá data, lze uvádět různorodé i
<a name="kontakt"></a>
## Kontakt
O slovník se stará tým, který lokalizuje do češtiny kancelářský balík LibreOffice. Napsat nám můžete do [e-mailové konference](https://listarchives.libreoffice.org/cz/lokalizace/) na adresu lokalizace@cz.libreoffice.org (e-mail bude veřejně viditelný).
\ No newline at end of file
O slovník se stará tým, který lokalizuje do češtiny kancelářský balík LibreOffice. Napsat nám můžete do [e-mailové konference](https://listarchives.libreoffice.org/cz/lokalizace/) na adresu lokalizace@cz.libreoffice.org (e-mail bude veřejně viditelný).
---
title: Nástroj na generování tvarů slov
date: 2019-11-12 20:05:15
---
{% raw %}
<main class="container mt-3">
<label for="wordCategorySelector">Zvolte si slovní druh: </label>
<select onchange="fillPatterns()" id="wordCategorySelector"><option hidden selected disabled value></option></select><br>
<label for="patternSelector">Zvolte si vzor skloňování slov: </label>
<select onchange="createUIForm()" id="patternSelector"><option hidden selected disabled value></option></select>
<form id="UIForm"></form>
</main>
<script src="./generators.js"></script>
<script src="./init.js"></script>
{% endraw %}
\ No newline at end of file
var generators = {
"czech-adjective": {
'label': 'česká přídavná jména',
'input_fields': [
'mužský rod, jednotné číslo, 1. pád 1. stupně přídavného jména ("mladý", "jarní", "rozmarný" atd.)'
],
"forms": {
"mladý": [
"s 1 ý$",
"s 1 ější [bdntpv]ý$ 1 ejší [fghklszm]ý$ 2 řejší rý$",
"s 1 í [bflmpsvzkrdtn]ý$ 2 zí [^c]hý$ 1 í chý$"
],
"jarní": [
"s 1 í í$",
"s 1 ější [bmpvn]í$ 1 ejší [žščřcjďťňflsz]í$"
]
},
'patterns': {
'mladý': [
'/1ý',
'/1ého',
'/1ému',
'/1ého',
'/1ý',
'/1ém',
'/1ým',
'/1ý',
'/1ého',
'/1ému',
'/1ý',
'/1ý',
'/1ém',
'/1ým',
'/1á',
'/1é',
'/1é',
'/1ou',
'/1á',
'/1é',
'/1ou', // instrumental, feminine, singular, positive
'/1é',
'/1ého',
'/1ému',
'/1é',
'/1é',
'/1ém',
'/1ým',
'/3',
'/1ých',
'/1ým',
'/1é',
'/3',
'/1ých',
'/1ými',
'/1é',
'/1ých',
'/1ým',
'/1é',
'/1é',
'/1ých',
'/1ými', // instrumental, inanimate masculine, plural, positive
'/1é',
'/1ých',
'/1ým',
'/1é',
'/1é',
'/1ých',
'/1ými',
'/1á',
'/1ých',
'/1ým',
'/1á',
'/1á',
'/1ých',
'/1ými',
'/2', // nominative, animate masculine, singular, comparative
'/2ho',
'/2mu',
'/2ho',
'/2',
'/2m',
'/2m',
'/2',
'/2ho',
'/2mu',
'/2',
'/2',
'/2m',
'/2m',
'/2',
'/2',
'/2',
'/2',
'/2',
'/2',
'/2', // instrumental, feminine, singular, comparative
'/2',
'/2ho',
'/2mu',
'/2',
'/2',
'/2m',
'/2m',
'/2',
'/2ch',
'/2m',
'/2',
'/2',
'/2ch',
'/2mi', // instrumental, animate masculine, plural, comparative
'/2',
'/2ch',
'/2m',
'/2',
'/2',
'/2ch',
'/2mi',
'/2',
'/2ch',
'/2m',
'/2',
'/2',
'/2ch',
'/2mi',
'/2',
'/2ch',
'/2m',
'/2',
'/2',
'/2ch',
'/2mi',
'nej/2', // nominative, animate masculine, singular, superlative
'nej/2ho',
'nej/2mu',
'nej/2ho',
'nej/2',
'nej/2m',
'nej/2m',
'nej/2',
'nej/2ho',
'nej/2mu',
'nej/2',
'nej/2',
'nej/2m',
'nej/2m',
'nej/2',
'nej/2',
'nej/2',
'nej/2',
'nej/2',
'nej/2',
'nej/2', // instrumental, feminine, singular, superlative
'nej/2',
'nej/2ho',
'nej/2mu',
'nej/2',
'nej/2',
'nej/2m',
'nej/2m',
'nej/2',
'nej/2ch',
'nej/2m',
'nej/2',
'nej/2',
'nej/2ch',
'nej/2mi', // instrumental, animate masculine, plural, superlative
'nej/2',
'nej/2ch',
'nej/2m',
'nej/2',
'nej/2',
'nej/2ch',
'nej/2mi',
'nej/2',
'nej/2ch',
'nej/2m',
'nej/2',
'nej/2',
'nej/2ch',
'nej/2mi',
'nej/2',
'nej/2ch',
'nej/2m',
'nej/2',
'nej/2',
'nej/2ch',
'nej/2mi'
],
'jarní': [
'/1',
'/1ho',
'/1mu',
'/1ho',
'/1',
'/1m',
'/1m',
'/1',
'/1ho',
'/1mu',
'/1',
'/1',
'/1m',
'/1m',
'/1',
'/1',
'/1',
'/1',
'/1',
'/1',
'/1',
'/1',
'/1ho',
'/1mu',
'/1',
'/1',
'/1m',
'/1m',
'/1', // first plural
'/1ch',
'/1m',
'/1',
'/1',
'/1ch',
'/1mi',
'/1',
'/1ch',
'/1m',
'/1',
'/1',
'/1ch',
'/1mi',
'/1',
'/1ch',
'/1m',
'/1',
'/1',
'/1ch',
'/1mi',
'/1',
'/1ch',
'/1m',
'/1',
'/1',
'/1ch',
'/1mi', //last plural
'/2',
'/2ho',
'/2mu',
'/2ho',
'/2',
'/2m',
'/2m',
'/2',
'/2ho',
'/2mu',
'/2',
'/2',
'/2m',
'/2m',
'/2',
'/2',
'/2',
'/2',
'/2',
'/2',
'/2',
'/2',
'/2ho',
'/2mu',
'/2',
'/2',
'/2m',
'/2m', // last singular comparative
'/2',
'/2ch',
'/2m',
'/2',
'/2',
'/2ch',
'/2mi',
'/2',
'/2ch',
'/2m',
'/2',
'/2',
'/2ch',
'/2mi',
'/2',
'/2ch',
'/2m',
'/2',
'/2',
'/2ch',
'/2mi',
'/2',
'/2ch',
'/2m',
'/2',
'/2',
'/2ch',
'/2mi', // last plural comparative
'nej/2',
'nej/2ho',
'nej/2mu',
'nej/2ho',
'nej/2',
'nej/2m',
'nej/2m',
'nej/2',
'nej/2ho',
'nej/2mu',
'nej/2',
'nej/2',
'nej/2m',
'nej/2m',
'nej/2',
'nej/2',
'nej/2',
'nej/2',
'nej/2',
'nej/2',
'nej/2',
'nej/2',
'nej/2ho',
'nej/2mu',
'nej/2',
'nej/2',
'nej/2m',
'nej/2m', // last singular superlative
'nej/2',
'nej/2ch',
'nej/2m',
'nej/2',
'nej/2',
'nej/2ch',
'nej/2mi',
'nej/2',
'nej/2ch',
'nej/2m',
'nej/2',
'nej/2',
'nej/2ch',
'nej/2mi',
'nej/2',
'nej/2ch',
'nej/2m',
'nej/2',
'nej/2',
'nej/2ch',
'nej/2mi',
'nej/2',
'nej/2ch',
'nej/2m',
'nej/2',
'nej/2',
'nej/2ch',
'nej/2mi', // last plural superlative
]
}
},
"czech-noun-masculine-inanimate": {
'label': "česká podstatná jména mužská neživotná",
'input fields': [
'1. pád čísla jednotného'
],
'forms': {
'aktivismus': [
"s 2 smus$"
],
'stroj': [
's 0 $',
's 0 [^c]$ 2 c c$'
]
},
'patterns': {
'aktivismus': [
"/1us",
"/1u",
"/1u",
"/1us",
"/1e",
"/1u",
"/1em",
"/1y",
"/1ů",
"/1ům",
"/1y",
"/1y",
"/1ech",
"/1y"
],
'stroj': [
'/1',
'/2e',
'/2i',
'/1',
'/2i',
'/2i',
'/2em',
'/2e',
'/2ů',
'/2ům',
'/2e',
'/2e',
'/2ích',
'/2i'
]
}
}
};
const wordCategorySelector = document.getElementById("wordCategorySelector");
const patternSelector = document.getElementById("patternSelector");
const UIForm = document.getElementById("UIForm");
let wordCategory = "";
let pattern = "";
Object.keys(generators).forEach(key => {
const opt = document.createElement('option');
opt.value = key;
opt.innerText = generators[key].label;
wordCategorySelector.appendChild(opt);
});
const fillPatterns = () => {
wordCategory = wordCategorySelector.options[wordCategorySelector.selectedIndex].value;
patternSelector.innerHTML = "";
Object.keys(generators[wordCategory].patterns).forEach(key => {
const opt = document.createElement('option');
opt.value = key;
opt.innerText = key;
patternSelector.appendChild(opt);
});
};
const createUIForm = () => {
pattern = patternSelector.options[patternSelector.selectedIndex].value;
UIForm.innerHTML = "";
generators[wordCategory].input_fields.forEach((pat, idx) => {
const lbl = document.createElement("label");
lbl.for = "pattern-" + idx;
lbl.innerText = pat;
UIForm.appendChild(lbl);
const inp = document.createElement("input");
inp.type = "text";
inp.id = "pattern-" + (idx + 1);
UIForm.appendChild(inp);
UIForm.appendChild(document.createElement("br"));
});
const submit = document.createElement("input");
submit.type = "button";
submit.onclick = generateFormsAndSubmit;
submit.value = "Generovat";
UIForm.appendChild(submit);
};
const generateFormsAndSubmit = () => {
const regex = /^(\D*)\/(\d+)(\D*)$/;
const HTMLForm = document.createElement("form");
HTMLForm.action = "https://tools.wmflabs.org/lexeme-forms/template/" + wordCategory;
HTMLForm.method = "post";
generators[wordCategory].forms[pattern].forEach((pat, idx) => {
const patParts = pat.split(" ");
if (patParts[0] === "s") {
let regexes = [];
for (let i = 3; i < patParts.length; i += 3) {
regexes.push(new RegExp(patParts[i]));
}
regexes.forEach((r, ix) => {
if (document.getElementById("pattern-1").value.match(r) != null) {
let inp = document.createElement("input");
inp.id = "pattern2-" + (idx + 1);
inp.value = document.getElementById("pattern-1").value.slice(0, -parseInt(patParts[3 * ix + 1])) + patParts[3 * ix + 2];
document.body.appendChild(inp);
}
})
}
});
generators[wordCategory].patterns[pattern].forEach(pat => {
const match = pat.match(regex);
const form = match === null ? "" : match[1] + document.getElementById("pattern2-" + match[2]).value + match[3];
const inp = document.createElement("input");
inp.type = "hidden";
inp.name = "form_representation";
inp.value = form;
HTMLForm.appendChild(inp);
});
document.body.appendChild(HTMLForm);
HTMLForm.submit();
};
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment