Skip to content

Commit

Permalink
adding paradigm_tools.py
Browse files Browse the repository at this point in the history
  • Loading branch information
fhardison committed Mar 10, 2020
1 parent 3f031da commit c6f52cf
Show file tree
Hide file tree
Showing 7 changed files with 690 additions and 0 deletions.
113 changes: 113 additions & 0 deletions examples.rst
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,8 @@ be used for testing.
<BLANKLINE>
<BLANKLINE>

>>> inflexion.conjugate_core("λύω", "PAI", "AAI", tags={"final-nu-aai.3s"})
[('PAI', {'PAI.1S': 'λῡ́ω', 'PAI.2S': 'λῡ́εις', 'PAI.3S': 'λῡ́ει', 'PAI.1P': 'λῡ́ομεν', 'PAI.2P': 'λῡ́ετε', 'PAI.3P': 'λῡ́ουσι(ν)'}), ('AAI', {'AAI.1S': 'ἔλυσα', 'AAI.2S': 'ἔλυσας', 'AAI.3S': 'ἔλυσε(ν)', 'AAI.1P': 'ἐλύσαμεν', 'AAI.2P': 'ἐλύσατε', 'AAI.3P': 'ἔλυσαν'})]

>>> inflexion.decline("λύω", "PAP")
-
Expand Down Expand Up @@ -128,3 +130,114 @@ be used for testing.
PAP.APN: λῡ́οντα
<BLANKLINE>
<BLANKLINE>

# `paradigm_tools.py`

`paradigm_tools.py` defines a few functions that use `greek-inflexion` to generate paradigms in either `html` or `markdown`.

For verbs use:

* `conjugate_html`
* `conjugate_md`




>>> import paradigm_tools as pu


>>> pu.conjugate_md("λύω", "PAI", "PMI", tags={"final-nu-aai.3s"}, merge_paradigms=True)
| ἀριθμός | πρώσοπον | ἐνεστώς ἐνεργητικόν ὁριστική | ἐνεστώς μέσον ὁριστική |
|:----|:----|:----|:----|
| ἑνικόν | πρῶτον | λῡ́ω | λῡ́ομαι |
| | δευτέρον | λῡ́εις | λῡ́ῃ/λῡ́ει |
| | τρίτον | λῡ́ει | λῡ́εται |
| πληθυντικόν | πρῶτον | λῡ́ομεν | λῡόμεθα |
| | δευτέρον | λῡ́ετε | λῡ́εσθε |
| | τρίτον | λῡ́ουσι(ν) | λῡ́ονται |
<BLANKLINE>

>>> pu.conjugate_md("λύω", "PAI", "PMI", tags={"final-nu-aai.3s"}, merge_paradigms=False)
| ἀριθμός | πρώσοπον | ἐνεστώς ἐνεργητικόν ὁριστική |
|:----|:----|:----|
| ἑνικόν | πρῶτον | λῡ́ω |
| | δευτέρον | λῡ́εις |
| | τρίτον | λῡ́ει |
| πληθυντικόν | πρῶτον | λῡ́ομεν |
| | δευτέρον | λῡ́ετε |
| | τρίτον | λῡ́ουσι(ν) |
<BLANKLINE>
| ἀριθμός | πρώσοπον | ἐνεστώς μέσον ὁριστική |
|:----|:----|:----|
| ἑνικόν | πρῶτον | λῡ́ομαι |
| | δευτέρον | λῡ́ῃ/λῡ́ει |
| | τρίτον | λῡ́εται |
| πληθυντικόν | πρῶτον | λῡόμεθα |
| | δευτέρον | λῡ́εσθε |
| | τρίτον | λῡ́ονται |
<BLANKLINE>

>>> pu.conjugate_html("λύω", "PAN", "AAN", tags={"final-nu-aai.3s"})
<link href="./paradigm.css" rel="stylesheet">
<table class="verb-paradigm">
<thead><tr class="para-header-row"><td class="para-header-cell"></td><td class="para-header-cell">ἀπαρέμφατος</td></tr></thead><tbody>
<tr><td class="para-item">ἐνεστώς ἐνεργητικόν</td><td class="para-item">λῡ́ειν</td></tr>
<tr><td class="para-item">ἀόριστος ἐνεργητικόν</td><td class="para-item">λῦσαι</td></tr>
</tbody>
</table>
<BLANKLINE>

For participels, adjectives, and nouns use:

* `decline_html`
* `decline_md`


>>> pu.decline_md("λύω", "PAP")
| ἀριθμός | πτῶσις | ἀρσενικόν | θηλυκόν | οὐδέτερον |
|:----|:----|:----|:----|:----|
| ἑνικόν | ὀνομαστική | λῡ́ων | λῡ́ουσᾰ | λῦον |
| | γενική | λῡ́οντος | λῡούσης | λῡ́οντος |
| | δοτική | λῡ́οντι | λῡούσῃ | λῡ́οντι |
| | αἰτιατική | λῡ́οντα | λῡ́ουσᾰν | λῦον |
| | κλητική | λῡ́ων | λῡ́ουσᾰ | λῦον |
| πληθυντικόν | ὀνομαστική | λῡ́οντες | λῡ́ουσαι | λῡ́οντα |
| | γενική | λῡόντων | λῡουσῶν | λῡόντων |
| | δοτική | λῡ́ουσι(ν) | λῡούσαις | λῡ́ουσι(ν) |
| | αἰτιατική | λῡ́οντας | λῡούσᾱς | λῡ́οντα |
| | κλητική | λῡ́οντες | λῡ́ουσαι | λῡ́οντα |
<BLANKLINE>


In cases where one does not want to use the forms found by `greek-inflexion` the following code can be run. If you want a merged paradigm where all forms are combined in the same table, then run the code below. It expects a list containing the lists for forms to be displayed and a list of column headers for each list. There is also a markdown version of this function called `layout_merged_verb_paradigm_md`. If you want seperate tables for each list, then run `layout_non_merged_verb_paradigm_html` or `layout_non_merged_verb_paradigm_md`. **Note**: this only work for indicative, subjuncitve, and optative.


>>> labels = pu.load_labels("labels.yaml", 'el')
>>> pu.layout_merged_verb_paradigm_html([["1", "2", "3", "4", "5", "6"]], ["Random"], labels)
<link href="./paradigm.css" rel="stylesheet">
<table class="verb-paradigm">
<thead><tr class="para-header-row"><td class="para-header-cell">ἀριθμός</td><td class="para-header-cell">πρώσοπον</td><td class="para-header-cell"></td></tr></thead><tbody>
<tr><td class="para-row-label" rowspan="3" valign="top">ἑνικόν</td><td class="para-row-label">πρῶτον</td><td class="para-item">1</td></tr>
<tr><td class="para-row-label">δευτέρον</td><td class="para-item">2</td></tr>
<tr><td class="para-row-label">τρίτον</td><td class="para-item">3</td></tr>
<tr><td class="para-row-label" rowspan="3" valign="top">πληθυντικόν</td><td class="para-row-label">πρῶτον</td><td class="para-item">4</td></tr>
<tr><td class="para-row-label">δευτέρον</td><td class="para-item">5</td></tr>
<tr><td class="para-row-label">τρίτον</td><td class="para-item">6</td></tr>
</tbody>
</table>
<BLANKLINE>


If you want seperate tables for each list, then run `layout_non_merged_verb_paradigm_html` or `layout_non_merged_verb_paradigm_md`. Note that unlike the merged versions, it expects a list of the forms (rather than a list of lists) and a single label (rather than a list of labels).


>>> pu.layout_non_merged_verb_paradigm_md(["1", "2", "3", "4", "5", "6"], "Random", labels)
| ἀριθμός | πρώσοπον | |
|:----|:----|:----|
| ἑνικόν | πρῶτον | 1 |
| | δευτέρον | 2 |
| | τρίτον | 3 |
| πληθυντικόν | πρῶτον | 4 |
| | δευτέρον | 5 |
| | τρίτον | 6 |
<BLANKLINE>
66 changes: 66 additions & 0 deletions greek_inflexion.py
Original file line number Diff line number Diff line change
Expand Up @@ -124,6 +124,72 @@ def conjugate(self, lemma, *TVMs, tags=None):
print()
print()

def conjugate_core(self, lemma, *TVMs, tags=None):
result = []
for TVM in TVMs:
out = {}
if TVM[2] in "ISO":
for PN in ["1S", "2S", "3S", "1P", "2P", "3P"]:
parse = TVM + "." + PN
form = "/".join(
self.generate(lemma, parse, tags=tags).keys())
if form:
out[parse] = form
elif TVM[2] == "D":
if "." not in TVM:
for PN in ["2S", "3S", "2P", "3P"]:
parse = TVM + "." + PN
form = "/".join(
self.generate(lemma, parse, tags=tags).keys())
if form:
out[parse] = form
else:
form = "/".join(
self.generate(lemma, parse, tags=tags).keys())
if form:
out[parse] = form
elif TVM[2] == "N":
parse = TVM
form = "/".join(
self.generate(lemma, parse, tags=tags).keys())
if form:
out[parse] = form
elif TVM[2] == "P":
if TVM.endswith(".N"):
for NG in ["SM", "SF", "SN"]:
parse = TVM + NG
form = "/".join(
self.generate(lemma, parse, tags=tags).keys())
if form:
out[parse] = form
else:
for CNG in ["NSM", "NSF", "NSN", "GSM", "GSF", "GSN"]:
parse = TVM + "." + CNG
form = "/".join(
self.generate(lemma, parse, tags=tags).keys())
if form:
out[parse] = form
result.append((TVM, out))
return result

def decline_core(self, lemma, TVM, tags=None):
if TVM[2] != "P":
raise ValueError
result = []
for G in "MFN":
forms = {}
for CN in [
"NS", "GS", "DS", "AS", "VS",
"NP", "GP", "DP", "AP", "VP"
]:
parse = TVM + "." + CN + G
form = "/".join(
self.generate(lemma, parse, tags=tags).keys())
if form:
forms[parse] = form
result.append(forms)
return result

def decline(self, lemma, TVM, tags=None):

if TVM[2] != "P":
Expand Down
58 changes: 58 additions & 0 deletions labels.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
en:
PL: plural
SG: singular
pres: present
act: active
mid: middle
pass: passive
1st: 1st
2nd: 2nd
3rd: 3rd
case: case
masc: M
fem: F
neut: N
nom: nom
gen: gen
dat: dat
acc: acc
voc: voc
person: person
number: number
unknown: '' #allows columns to be blank if '' else uses whatever lebel you assign for them
AAI: Aorist Active Indicative
PAI: Present Active Indicative
XAI: perfect active indicative
IAI: Imperfect Active Indicative
FAI: Future Active Indicative
PMI: Present Middle Indicative
el:
PL: πληθυντικόν
SG: ἑνικόν
act: ἐνεργητικόν
mid: μέσον
pass: παθητικόν
person: πρώσοπον
1st: πρῶτον
2nd: δευτέρον
3rd: τρίτον
number: ἀριθμός
masc: ἀρσενικόν
fem: θηλυκόν
neut: οὐδέτερον
case: πτῶσις
nom: ὀνομαστική
gen: γενική
dat: δοτική
acc: αἰτιατική
voc: κλητική
inf: ἀπαρέμφατος
unknown: '' #allows columns to be blank if '' else uses whatever lebel you assign for them
AAI: ἀόριστος ἐνεργητικόν ὁριστική
PAI: ἐνεστώς ἐνεργητικόν ὁριστική
XAI: παρακείμενος ἐνεργητικόν ὁριστική
IAI: παρατατικός ἐνεργητικόν ὁριστική
FAI: μέλλων ἐνεργητικόν ὁριστική
PMI: ἐνεστώς μέσον ὁριστική
PAN: ἐνεστώς ἐνεργητικόν
AAN: ἀόριστος ἐνεργητικόν
13 changes: 13 additions & 0 deletions paradigm.css
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
.para-header-row { }
.para-header-cell {margin-bottom:3em; border-bottom: solid 0.125em black;}

.para-row-label {margin-right:1.25em;}

table {
border-collapse: collapse;
}

td {
font-size: 1.25em;
padding:0.25em;
}
Loading

0 comments on commit c6f52cf

Please sign in to comment.