Commit 7e1b6688 authored by di68kap's avatar di68kap

- Disambiguierung von Autornamen (Primärquelle, Sekundärquelle) durch Dollar-Zeichen

parent 1d5a3ddf
- Kein abschließender Punkt nach Fragezeichen (oder Ausrufezeichen). ERLEDIGT
- Sekundärtexte: Wie Primärquellen Autornamen komplett groß geschrieben.
Bestimmung der Sekundärquellen als solche anhand von Listen. Auflösung von Mehrdeutigkeiten mit $-Zeichen.
Bestimmung der Sekundärquellen als solche anhand von Listen.
- Auflösung von Mehrdeutigkeiten mit $-Zeichen. ERLEDIGT
- Autornamen bei Primärquellen nach einer Liste einfärben. ERLEDIGT
......
......@@ -258,7 +258,7 @@ Quellenangabe = (Quelle | BelegStelle) { ";" BelegStelle }
Quelle = [ZW] AutorWerk [!Beschreibung Zusatz] [Einschub] [!Beschreibung Zusatz]
Sekundärliteratur = {Zusatz} Autorangabe "," [ZW] Werk { ";" [ZW] BelegStelle }
Autorangabe = { DEU_GROSS | DEU_KLEIN }
Autorangabe = { DEU_GROSS | DEU_KLEIN }
BelegStelle = { Zusatz } [ZW] ([Werk ";"] Stellenangabe [[ZW] BelegText])
[[ZW] (!Beschreibung Zusatz | Einschub) ]
......@@ -275,7 +275,7 @@ LEMMAWORT = [/[.|]*/] LAT_GWORT # [/[.|]*/]
@AutorWerk_error = 'Autor- und Werkangabe sollten durch ein Semikolon ";" abgeschlossen werden, oder, am Ende eines Einschubs, durch eine doppelte Runde Klammer "))".'
AutorWerk = Autor §[Werk] &(";" | "))")
Autor = [ZW] AUTORANFANG { [ZW] AUTORNAME }
Autor = [ZW] ["$"] AUTORANFANG { [ZW] AUTORNAME } # "$" dient als optionale Markierung für Sekundärliteratur
Werk = [ZW] WERKTITEL_ANFANG { [ZW] WERKTITEL_FOLGE }
......
......@@ -123,7 +123,7 @@ class MLWGrammar(Grammar):
opus = Forward()
wortart = Forward()
wortarten = Forward()
source_hash__ = "ca6cf4d41b8f6838b9feaf9f7cbd1896"
source_hash__ = "a66dcef5d53ce50f170422d0da399813"
static_analysis_pending__ = [True]
parser_initialization__ = ["upon instantiation"]
VerweisKern_err_msg__ = [(re.compile(r'[^|]*}'), 'Kein gültiges Verweisziel: "{1}" oder Platzhalter "|-" fehlt nach Alias!'), (re.compile(r'=>'), 'Kein gültiger Verweis "{1}". Mglw. ein Verweiszeichen "=>" zuviel.'), ('', 'Kein gültiger Verweis: "{1}"')]
......@@ -208,7 +208,7 @@ class MLWGrammar(Grammar):
opus.set(Series(Lookahead(Series(Token("(("), wsp__)), Alternative(opus_minus, Einschub), mandatory=1))
Stelle.set(OneOrMore(Series(Option(ZW), NegativeLookahead(VERBOTEN), STELLENTEXT)))
Werk.set(Series(Option(ZW), WERKTITEL_ANFANG, ZeroOrMore(Series(Option(ZW), WERKTITEL_FOLGE))))
Autor = Series(Option(ZW), AUTORANFANG, ZeroOrMore(Series(Option(ZW), AUTORNAME)))
Autor = Series(Option(ZW), Option(Series(Token("$"), wsp__)), AUTORANFANG, ZeroOrMore(Series(Option(ZW), AUTORNAME)))
AutorWerk = Series(Autor, Option(Werk), Lookahead(Alternative(Series(Token(";"), wsp__), Series(Token("))"), wsp__))), mandatory=1, err_msgs=AutorWerk_err_msg__)
LEMMAWORT = Series(Option(RegExp('[.|]*')), LAT_GWORT)
Lemmawort = Alternative(Series(Series(Token("#{"), wsp__), Option(ZW), OneOrMore(Series(Alternative(LEMMAWORT, SATZZEICHEN), Option(ZW))), Series(Token("}"), wsp__), mandatory=2), Series(Series(Token("#"), wsp__), LEMMAWORT, mandatory=1))
......
......@@ -37,6 +37,10 @@ M14: """corripere, aggravare -- befallen, plagen, quälen;
M15: """{proprie} incensio -- Brand:"""
M16: """in malam partem de hominibus, diabolo fere i. q. insusurratio -- etwa: Einflüsterung:"""
M17: """in bonam partem de #inspiration.|e divina, a Deo dispensata:"""
M18: """pannus, faciale, sudarium -- (Gesichts-, Schweiß-)Tuch; usu liturg.; {de re v. {=> eintrag/ibi_X}}:"""
M19:"""pannus, faciale, sudarium -- (Gesichts-, Schweiß-)Tuch; {(usu liturg.)}; de re v. {=> eintrag/ibi_X}:"""
M20: """interponere, inserere -- dazwischenstellen, (dazwischen) einfügen, einschieben (in); {intrans. i. q.} interesse, interpositum esse -- dazwischen lieghen, stehen:"""
M21: """spectat ad sonos; {modos i. q.} gravior -- tiefer {(usu mus.)}:"""
[ast:Bedeutungsangabe]
M15: """(Bedeutungsangabe
......
[match:BedeutungsPosition]
M1: """
BEDEUTUNG pannus, faciale, sudarium --
Gesichts-, Schweißtuch {usu liturg.: de re v. p. 32, 63}:
* CATAL. thes. Germ.; 28,11 (post 851) "#facitergulum III" """
[match:Bedeutungsangabe]
M1: """capital, rica -- Kopftuch:"""
M2: """de Karolinorum vel Francorum sive sacro Romano(rum) imperio q. d.
(‘Karolinger-, Frankenreich bzw. sog. Heiliges Römisches Reich {de re v. LexMA. IV. {=> p. 2025sqq.|URL}}):"""
M3: """incolae inferni, mortui -- Bewohner der Unterwelt,
Verstorbene {(in imag.: {=>l. 58.|-}; fort. meton. de inferno: {=>l_55_62})}:"""
M4: """katýteroß -- tiefer (gelegen), darunterliegend, Unter-:"""
M5: """{spectat ad sonos, modos i. q.} gravior -- tiefer {(usu mus.)}:"""
M6: """spectat ad sonos ({modos i. q.} gravior -- tiefer {(usu mus.)}):"""
M7: """adi. in iunctura "mare #infer|um" de mare Tyrrheno (de re v. Allg.
Encyklopädie d. Wissenschaften u. Künste. II/18. 1840. p. 158sq.):"""
M8: """{fort. add.} pro cognomento;
‘Ungefug’{; cf. Lexer, Mittelhochdt. Handwb. II. p. 1882 s. v. ungevuoge. M. Gottschald,
R. Schützeichel, Dt. Namenkunde. 51982. p. 502. A. Heintze, P. Cascorbi.
71933. p. 491^A}:"""
M9: """{fort. add.} pro cognomento;
‘Ungefug’{; cf. Lexer, Mittelhochdt. Handwb.; II. p. 1882 s. v. "ungevuoge" M. Gottschald,
R. Schützeichel, Dt. Namenkunde. 51982. p. 502. A. Heintze, P. Cascorbi.
71933. p. 491^A}:"""
M10: """de febre ardente ('hitziges Fieber') {v. {=> causon p. 413,2|-}}:"""
M11:"""fomes -- Brennstoff, 'Nahrung' {v. {=>incendium_10} {=>incentrix p. 1531,6 |-}}:"""
M12: """corripere, aggravare -- befallen, plagen, quälen;
{mediopass. i. q.} laborare -- leiden (an);
absol. vel ellipt.: {=> infesto_1}:"""
M13: """impedire -- hindern;
{absol. vel ellipt. i. q.} oppositum esse --
hinderlich sein, entgegenstehen:"""
M14: """corripere, aggravare -- befallen, plagen, quälen;
{mediopass. i. q.} laborare -- leiden (an); absol. vel ellipt.: {=> infesto_1}:"""
M15: """{proprie} incensio -- Brand:"""
M16: """in malam partem de hominibus, diabolo fere i. q. insusurratio -- etwa: Einflüsterung:"""
M17: """in bonam partem de #inspiration.|e divina, a Deo dispensata:"""
[ast:Bedeutungsangabe]
M15: """(Bedeutungsangabe
(Interpretamente
(Zusatz
"proprie"
)
(L
" "
)
(LateinischeBedeutung
(LateinischesWort
"incensio"
)
)
(L
" "
)
(DeutscheBedeutung
(DeutschesWort
"Brand"
)
)
)
)"""
[match:Klassifikation]
M1: """de Karolinorum vel Francorum sive sacro Romano(rum) imperio q. d.
(‘Karolinger-, Frankenreich bzw. sog. Heiliges Römisches Reich {de re v. LexMA. IV. {=> p. 2025sqq.|URL}})"""
M2: """iur. de lenioribus delictis iudicandis [‘niedere Gerichtsbarkeit’]"""
M3: """de hominibus {(de Fortuna: {=>l. 30|-})}"""
[fail:Klassifikation]
F1: """capital, rica -- Kopftuch"""
[match:Interpretamente]
M1: """capital, rica -- Kopftuch"""
M2: """capital, rica
-- Kopftuch"""
M3: """fomes -- Brennstoff, 'Nahrung' {v. {=>incendium_10} {=>incentrix p. 1531,6 |-}}"""
[match:LateinischeBedeutung]
M1: """pannus, faciale, sudarium"""
M2: """capital, rica"""
M3: """qui (solo) intellectu percipitur"""
[match:DeutscheBedeutung]
M1: """Gesichts-, Schweißtuch {usu liturg.: de re v. p. 32, 63}"""
M2: """Kopftuch"""
M3: """Gefolge, Gefolge (des Kaisers) {spectat ad militiam}"""
M4: """Wille, (willkürlicher) Beschluss"""
M5: """der
(ausschließlich) mit dem Intellekt begriffen werden kann
{de re v. LThK. 3V. p. 551 s. v. ‘Intelligibel’}"""
M6: "vollständig, 'komplett', ganz, gesamt, unvermindert"
M7: "unten (angegeben, aufgeführt; {usu praed. sensu adv.: {=> l. 44|-}})"
M8: "{etwa:} innerer"
M9: "(Halb-, Binnenhalb-, Binnen-)Insel"
M10: "Halb-, Binneninsel"
M11: """Gesichtstuch,
Tuch"""
[ast:DeutscheBedeutung]
M11: (DeutscheBedeutung (DeutschesWort "Gesichtstuch") (:Token ",") (L " ") (DeutschesWort "Tuch"))
[match:Nebenbedeutungen]
M1: "; usu liturg.; {de re v. {=> ziel|-}}"
M2: "; usu liturg.{; de re v. {=> ziel|-}}"
[ast:Nebenbedeutungen]
M1: """'(Nebenbedeutungen (L " ") (Klassifikation "usu liturg.") (L " ") (Zusatz (TEXT "de re v. ") (L " ") (Verweise (Verweis (alias "ziel")))))'"""
M2: """'(Nebenbedeutungen (L " ") (Klassifikation (TEXT "usu liturg.") (Zusatz (TEXT "; de re v. ") (L " ") (Verweise (Verweis (alias "ziel"))))))'"""
[match:FreierZusatz]
M99: "{v. {=>incendium_10} {=>incentrix p. 1531,6 |-}}"
......@@ -47,6 +47,7 @@ M11: """* {cf.} Wartburg, Frz. etym. Wb. IV.; p. 728sqq.
* Battisti-Alessio, Diz. etim. ital. III.; p. 2111 s. v. 2. "ischia"
* F. Giger et al., Dicziunari Rumantsch Grischun X.; p. 130sq. s. v. 1. "isla" """
M12: """{=>incendium_2} {=>incendium_3} {=>incendium_4}"""
M13: """* VITA Aniani; 7 ((MGMer. III p. 113,1))(c. s. VIII.) "ille quendam #iocular|em sermonem emisit pium et sanctum." """
[fail:Belege]
......@@ -112,31 +113,7 @@ F2: """
F3: """TRANSL. Libor. I; 32 "Kein Punkt am Ende eines Belegs erlaubt"."""
[ast:Beleg]
M19: """
(Beleg
(FesterZusatz
"adde"
)
(L
" "
)
(Quellenangabe
(Quelle
(Autor
"ANNAL. PLAC."
)
)
(L
" "
)
(BelegStelle
(Stelle
"a. 1266 p. 516,21."
)
)
)
)
"""
M19: """(Beleg (FesterZusatz "adde") (L " ") (Quellenangabe (Quelle (Autor "ANNAL. PLAC.")) (L " ") (BelegStelle (Stellenangabe (Stelle "a. 1266 p. 516,21.")))))"""
[match:BelegKern]
M1: '''pulpitum ... #facitergula cocco
......@@ -196,7 +173,7 @@ M3: "376 p. 258,8 ((DIPL. Frid. II.))"
M4: '((SBMünch. 1865; p. 13)) "gentes"'
[ast:BelegStelle]
M4: (BelegStelle (opus_minus (Werk "SBMünch. 1865") (L " ") (Stelle "p. 13")) (L " ") (BelegText (TEXT "gentes")))
M4: '(BelegStelle (Stellenangabe (opus_minus (Werk "SBMünch. 1865") (L " ") (Stelle "p. 13"))) (L " ") (BelegText (TEXT "gentes")))'
[fail:BelegStelle]
F1: "ALCUIN epist.;"
......
......@@ -3,6 +3,7 @@ M1: "HRABAN. epist.; 11"
M2: "GODESC. SAXO gramm.; 11"
M3: "AURELIUS; 11"
M4: "{cf. PG 3,536^C} Ápeiroß"
M5: "$HRABAN. epist.; 11"
[match:BelegText]
M1: '''"et cetera mala,
......
......@@ -175,10 +175,16 @@ def spalte(l: List[str], countdown: int=1) -> Dict[str, Union[List[str], Dict]]:
{'[A-B]': ['Y', 'X'], '[C-D]': ['W', 'V']}
"""
def R(s: str) -> str:
return s.replace('[', r'\[').replace(']', r'\]')
l.sort()
return s.replace('[', r'\[').replace(']', r'\]').replace(r'\b', 'A')
if countdown <= 0:
m = set(l)
if '' in m:
m.remove('')
m.add(r'\b')
l = list(m)
l.sort()
return l
l.sort()
L = len(l)
k = L // 2 + L % 2
while 1 <= k < L and l[k-1][0] == l[k][0]:
......@@ -187,7 +193,7 @@ def spalte(l: List[str], countdown: int=1) -> Dict[str, Union[List[str], Dict]]:
f'[{R(l[k][0])}-{R(l[-1][0])}]': spalte([s[1:] for s in l[k:]], countdown - 1)}
def erzeuge_autoren_regex(autoren_menge: set) -> str:
def erzeuge_autoren_regex(autoren_menge: set, tiefe: int = 2) -> str:
"""Erzeugt aus der übergebenen Menge von Autoren einen regulären Ausdruck, der
auf alle Autorennamen passt."""
def R(s: str) -> str:
......@@ -202,7 +208,7 @@ def erzeuge_autoren_regex(autoren_menge: set) -> str:
f'|(?:{keys[1]}(?:' + re_block(data[keys[1]]) + '))'
autoren = list(autoren_menge)
autoren.sort()
return r'\b((?<![$])' + re_block(spalte(autoren, 2)) + r')\b'
return r'\b((?<![$])' + re_block(spalte(autoren, tiefe)) + r')\b'
# return r'\b(' + '|'.join(autoren) + r')\b'
......@@ -220,17 +226,20 @@ if __name__ == "__main__":
autoren = set()
opera_majora = lade_opera_majora_tabelle(autoren)
# autoren = {'AY', 'BX', 'CW', 'DV', 'EU'}
restr = erzeuge_autoren_regex(autoren)
restr = erzeuge_autoren_regex(autoren, 3)
schreibe_autoren_syntax_hilighting(restr)
schreibe_schnipsel_json(opera_majora)
# begin test-code
print('\n\nTest des regulären Ausdrucks für die Autorennamen:')
# import regex as re
rx = re.compile(restr)
print("Finde LIGURINUS: ", rx.match('LIGURINUS'))
import timeit
print("Zeitmessung: 1 Mio mal LIGURINUS finden: ",
timeit.timeit("rx.match('LIGURINUS')", number=1_000_000, globals=globals()))
print("Zeitmessung: 1 Mio mal NIX_DA finden: ",
timeit.timeit("rx.match('NIX_DA')", number=1_000_000, globals=globals()))
# end test-code
print('\nfertig :-)')
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