Skip to content

Commit

Permalink
Verb tensing appears to be working.
Browse files Browse the repository at this point in the history
  • Loading branch information
templedf committed Feb 28, 2014
1 parent 68f5204 commit 417d31e
Show file tree
Hide file tree
Showing 8 changed files with 1,205 additions and 189 deletions.
Binary file added data/AnitaBlake02LaughingCorpse.pdf
Binary file not shown.
Binary file added data/AnitaBlake03CircusOfTheDamned.pdf
Binary file not shown.
Binary file added data/AnitaBlake04LunaticCafe.pdf
Binary file not shown.
1,093 changes: 923 additions & 170 deletions data/dictionary.json

Large diffs are not rendered by default.

11 changes: 1 addition & 10 deletions data/sentences.json
@@ -1,16 +1,7 @@
{
"dev":
[
"Das kurze schwarze Haar hatte er sich aus dem dünnen dreieckigen Gesicht nach hinten geklatscht.",
"Er hatte mich schon immer ein wenig an eine Gestalt aus einem Gangsterfilm erinnert.",
"Aber für alle Fälle vermied ich es, ihm direkt in die Augen zu sehen.",
"Jetzt, wo Willie ein Vampir war, war die Sache mit der Entbehrlichkeit natürlich nicht mehr von Bedeutung.",
"Ich wollte ihn fragen, was sich denn änderte.",
"Ich wusste nicht, dass Vampire nervöse Zuckungen haben können.",
"Ich schaute den Vampir an, der vor mir saß, und zuckte die Achseln.",
"Es steht mir nicht zu, polizeiliche Angelegenheiten mit Ihnen zu besprechen.",
"Bert und ich würden uns ziemlich bald mal unterhalten müssen.",
"Er entfernte sich von mir und drehte mir den Rücken zu."
"Das kurze schwarze Haar hatte er sich aus dem dünnen dreieckigen Gesicht nach hinten geklatscht."
],
"test":
[
Expand Down
150 changes: 150 additions & 0 deletions data/starkeverben.csv
@@ -0,0 +1,150 @@
backen (Dat) Akk,backt / bäckt,backte / buk,hat gebacken
befehlen Dat Akk / Inf.,befiehlt,befahl,hat befohlen
beginnen mit / Inf.,beginnt,begann,hat begonnen
beißen Akk,beißt,biss,hat gebissen
bergen Akk,birgt,barg,hat geborgen
betrügen Akk,betrügt,betrog,hat betrogen
biegen Akk,biegt,bog,hat gebogen
bieten Dat Akk,bietet,bot,hat geboten
binden Akk,bindet,band,hat gebunden
bitten Akk,bittet,bat,hat gebeten
blasen,bläst,blies,hat geblasen
bleiben Situativ-Erg.,bleibt,blieb,ist geblieben
braten (Dat) Akk,brät,briet,hat gebraten
brechen (Dat) Akk,bricht,brach,hat gebrochen
brennen,brennt,brannte,hat gebrannt
bringen Dat Akk,bringt,brachte,hat gebracht
denken an / über,denkt,dachte,hat gedacht
ein|dringen in + Akk,dringt ... ein,drang ... ein,ist eingedrungen
empfangen Akk,empfängt,empfing,hat empfangen
empfehlen Dat Akk / Inf.,empfiehlt,empfahl,hat empfohlen
empfinden Akk,empfindet,empfand,hat empfunden
erlöschen,erlischt,erlosch,ist erloschen
erschrecken (intr.),erschrickt,erschrak,ist erschrocken
erwägen Akk / Inf.,erwägt,erwog,hat erwogen
essen Akk,isst,aß,hat gegessen
fahren Dir.-Erg./(Akk)/mit,fährt,fuhr,ist (hat) gefahren
fallen (Dir.-Erg.),fällt,fiel,ist gefallen
fangen Akk,fängt,fing,hat gefangen
finden Akk,findet,fand,hat gefunden
fliegen (Dir.-Erg.) / (Akk),fliegt,flog,ist / (hat) geflogen
fliehen vor,flieht,floh,ist geflohen
fließen Dir.-Erg.,fließt,floss,ist geflossen
fressen Akk,frisst,fraß,hat gefressen
frieren Akk,friert,fror,hat gefroren
gebären Akk,gebärt (gebiert),gebar,(ist) hat geboren
geben Dat Akk,gibt,gab,hat gegeben
gedeihen,gedeiht,gedieh,ist gediehen
gehen Dir.-Erg.,geht,ging,ist gegangen
gelingen Dat (Inf.),gelingt,gelang,ist gelungen
gelten,gilt,galt,hat gegolten
genießen Akk (Inf.),genießt,genoss,hat genossen
geraten in + Akk,gerät,geriet,ist geraten
geschehen Dat Akk,geschieht,geschah,ist geschehen
gewinnen (Akk),gewinnt,gewann,hat gewonnen
gießen Akk,gießt,goss,hat gegossen
gleichen Dat,gleicht,glich,hat geglichen
gleiten,gleitet,glitt,ist geglitten
graben Akk,gräbt,grub,hat gegraben
greifen (Dat) Akk,greift,griff,hat gegriffen
haben Akk,hat,hatte,hat gehabt
halten Akk,hält,hielt,hat gehalten
hängen Situativ-Erg.,hängt,hing,hat gehangen
hängen Akk Dir.-Erg.,hängt,hängte,hat gehängt
heben Akk,hebt,hob,hat gehoben
heißen (2 x Nom.-Erg.!),heißt,hieß,hat geheißen
helfen Dat,hilft,half,hat geholfen
kennen Akk,kennt,kannte,hat gekannt
klingen,klingt,klang,hat geklungen
kneifen (Akk),kneift,kniff,hat gekniffen
kommen Dir.Erg.,kommt,kam,ist gekommen
kriechen (Dir.-Erg.),kriecht,kroch,ist gekrochen
laden Akk,lädt,lud,hat geladen
lassen Akk,lässt,ließ,hat gelassen
laufen (Dir.-Erg.),läuft,lief,ist gelaufen
leiden an / unter,leidet,litt,hat gelitten
leihen Dat Akk,leiht,lieh,hat geliehen
lesen Akk,liest,las,hat gelesen
liegen Situativ-Erg.,liegt,lag,hat gelegen
lügen,lügt,log,hat gelogen
meiden Akk,meidet,mied,hat gemieden
messen Akk,misst,maß,hat gemessen
misslingen Dat (Inf.),misslingt,misslang,ist misslungen
nehmen (Dat) Akk,nimmt,nahm,hat genommen
nennen (Dat) Akk,nennt,nannte,hat genannt
pfeifen (Akk),pfeift,pfiff,hat gepfiffen
preisen Akk,preist,pries,hat gepriesen
quellen,quillt,quoll,ist gequollen
raten Dat Akk / Inf.,rät,riet,hat geraten
reiben Akk,reibt,rieb,hat gerieben
reißen Akk (in/an + Akk),reißt,riss,hat gerissen
reiten (Akk),reitet,ritt,ist (hat) geritten
rennen Dir.-Erg.,rennt,rannte,ist gerannt
riechen (Akk),riecht,roch,hat gerochen
ringen Akk,ringt,rang,hat gerungen
rinnen Dir.-Erg.,rinnt,rann,ist geronnen
rufen Akk,ruft,rief,hat gerufen
saufen (Akk),säuft,soff,hat gesoffen
schaffen Akk (Inf.),schafft,schuf,hat geschaffen
scheiden,scheidet,schied,hat geschieden
scheinen,scheint,schien,hat geschienen
scheren Akk,schert,schor,hat geschoren
schieben Akk Dir.-Erg.,schiebt,schob,hat geschoben
schießen (Akk),schießt,schoss,hat geschossen
s. schinden,schindet,schund,hat geschunden
schlafen (Situativ-Erg.),schläft,schlief,hat geschlafen
schlagen Akk,schlägt,schlug,hat geschlagen
schleichen,schleicht,schlich,ist geschlichen
schließen Akk,schließt,schloss,hat geschlossen
schlingen Akk,schlingt,schlang,hat geschlungen
schmeißen Akk (Dir.-Erg.),schmeißt,schmiss,hat geschmissen
schmelzen,schmilzt,schmolz,ist/hat geschmolzen
schneiden (Dat) Akk,schneidet,schnitt,hat geschnitten
schreiben (Dat) Akk,schreibt,schrieb,hat geschrieben
schreien,schreit,schrie,hat geschrien
schreiten,schreitet,schritt,ist geschritten
schweigen,schweigt,schwieg,hat geschwiegen
schwellen,schwillt,schwoll,ist geschwollen
schwimmen,schwimmt,schwamm,ist geschwommen
schwinden (Dat / Akk),schwindet,schwand,ist geschwunden
schwingen,schwingt,schwang,hat geschwungen
schwören Dat Akk,schwört,schwor,hat geschworen
sehen Akk,sieht,sah,hat gesehen
sein Situativ-Erg.,ist,war,ist gewesen
senden Dat Akk,sendet,sandte,hat gesandt
singen (Dat) Akk,singt,sang,hat gesungen
sinken,sinkt,sank,ist gesunken
sinnen Dat nach + Dat,sinnt,sann,hat gesonnen;
sitzen Situativ-Erg.,sitzt,saß,hat gesessen
spinnen (Akk),spinnt,spann,hat gesponnen
sprechen mit + Dat,spricht,sprach,hat gesprochen
sprießen,sprießt,spross,ist gesprossen
springen Dir.Erg.,springt,sprang,ist gesprungen
stechen Akk,sticht,stach,hat gestochen
stehen Situativ-Erg.,steht,stand,hat gestanden
stehlen (Dat) Akk,stiehlt,stahl,hat gestohlen
steigen Dir.-Erg.,steigt,stieg,ist gestiegen
sterben an,stirbt,starb,ist gestorben
stinken (nach + Dat),stinkt,stank,hat gestunken
streichen Akk,streicht,strich,hat gestrichen
s. streiten mit,streitet,stritt,hat gestritten
tragen Akk,trägt,trug,hat getragen
treffen Akk,trifft,traf,hat getroffen
treiben Situativ-Erg.,treibt,trieb,hat getrieben
treten Akk,tritt,trat,hat getreten
trinken Akk,trinkt,trank,hat getrunken
tun (Dat) Akk,tut,tat,hat getan
verderben (Dat) Akk,verdirbt,verdarb,hat verdorben
vergessen Dat Akk / Inf.,vergisst,vergaß,hat vergessen
verlieren Akk / gegen,verliert,verlor,hat verloren
wachsen,wächst,wuchs,ist gewachsen
waschen (Dat) Akk,wäscht,wusch,hat gewaschen
weichen von + Dat,weicht,wich,ist gewichen
weisen Dat Akk,weist,wies,hat gewiesen
werben um + Akk,wirbt,warb,hat geworben
werden (2 x Nominativ!),wird,wurde,ist geworden
werfen Akk,wirft,warf,hat geworfen
wiegen,wiegt,wog,hat gewogen
wissen Akk,weiß,wusste,hat gewusst
ziehen (Dat) Akk,zieht,zog,hat gezogen
zwingen Akk zu + Dat,zwingt,zwang,hat gezwungen
108 changes: 99 additions & 9 deletions src/MT.py
@@ -1,4 +1,4 @@
#!/usr/bin/python
#!/usr/bin/python
# -*- coding: utf8 -*-

import copy
Expand Down Expand Up @@ -55,7 +55,8 @@
u'zur': [u'zu_APPR', u'der_ART']
}

VERB_PATTERN = re.compile('(..+)(?:e|st|t|en|te|test|tet|ten)')
VERB_PATTERN = re.compile('(..+)(?:e|st|t|en|ete|etest|etet|eten)')
REGULAR_PATTERN = re.compile(unicode('(..+)((et)?(e|st|t|en))?'))

class MT:

Expand Down Expand Up @@ -90,15 +91,16 @@ def translate(self, file):

for w in words:
LL.append(self.lookup(w))
print LL[-1]

engSent.append(refine_word_choice(LL))
engSent.append(self.refine_word_choice(LL))
# engSent.append(LL)


return engSent


def refine_word_choice(LL):
def refine_word_choice(self, LL):

output = [[]]

Expand Down Expand Up @@ -308,28 +310,116 @@ def lookup(self, word):
translation = self.dictionary['words'][parts[0]]
elif parts[0].lower() in self.dictionary['words']:
translation = self.dictionary['words'][parts[0].lower()]
elif parts[1].startswith('V'):
translation = self.dictionary['words'][verb_stem(parts[0])]

if parts[1].startswith('V'):
translation = set_tense(translation, get_tense(parts[0], parts[1]))
print translation
translation = [self.from_tense(w, self.get_tense(parts[0], parts[1])) for w in translation]

return translation

def verb_stem(self, verb):

stem = verb

m = VERB_PATTERN.match(verb)
m = REGULAR_PATTERN.match(verb)

if m:
stem = m.group(1)
else:
# Must be irregular present or past (1S or 3S), but how did we
# not already find it in the dictionary?
raise("Didn't find %s in the dictionary" % verb)
raise Exception("Didn't find %s in the dictionary" % verb)

return stem

def from_tense(self, verb, tense):
new = verb

print tense

if verb in self.dictionary['verbs'] and len(self.dictionary['verbs'][verb]) == 3 and tense == '1':
new = self.dictionary['verbs'][verb][0][0]
elif verb in self.dictionary['verbs'] and len(self.dictionary['verbs'][verb]) == 3 and tense == '2':
new = self.dictionary['verbs'][verb][0][1]
elif verb in self.dictionary['verbs'] and len(self.dictionary['verbs'][verb]) == 3 and tense == '3':
new = self.dictionary['verbs'][verb][0][2]
elif verb in self.dictionary['verbs'] and len(self.dictionary['verbs'][verb]) == 3 and tense[-1] == '+':
new = self.dictionary['verbs'][verb][0][3]
elif verb in self.dictionary['verbs'] and tense == 'PP':
new = self.dictionary['verbs'][verb][-1]
elif verb in self.dictionary['verbs'] and type(self.dictionary['verbs'][verb][-2]) == 'list' and tense == '1P':
new = self.dictionary['verbs'][verb][-2][0]
elif verb in self.dictionary['verbs'] and type(self.dictionary['verbs'][verb][-2]) == 'list' and tense == '2P':
new = self.dictionary['verbs'][verb][-2][1]
elif verb in self.dictionary['verbs'] and type(self.dictionary['verbs'][verb][-2]) == 'list' and tense == '3P':
new = self.dictionary['verbs'][verb][-2][2]
elif verb in self.dictionary['verbs'] and type(self.dictionary['verbs'][verb][-2]) == 'list' and tense[-2:] == '+P':
new = self.dictionary['verbs'][verb][-2][3]
elif verb in self.dictionary['verbs'] and tense[-1] == 'P':
new = self.dictionary['verbs'][verb][-2]
elif tense[-1] == 'P' and verb[-1] == 'e':
new = verb + 'd'
elif tense[-1] == 'P' and re.match('.*[^aeiou][aeiou][b-df-hj-np-tvwyz]$', verb):
new = verb + verb[-1] + 'ed'
elif tense[-1] == 'P':
new = verb + 'ed'
elif tense == 'I':
new = verb + 'ing'
elif tense == '2' and verb[-1] == 'o':
new = verb + 'es'
elif tense == '2':
new = verb + 's'

return new

def get_tense(self, verb, tag):
tense = None

print verb, tag

if tag.endswith('PP'):
tense = 'P'
elif tag.endswith('INF'):
tense = 'I'
elif verb in self.dictionary['tenses']:
tense = self.dictionary['tenses'][verb]

if tense == 'P':
tense = '1P' #1st or 3rd, we don't care which
elif tense == 'I':
tense = '1+' #1st or 3rd, we don't care which
else:
m = REGULAR_PATTERN.match(verb)

if m and m.group(1) in self.dictionary['tenses'][verb]:
tense = self.dictionary['tenses'][verb]

if tense == 'P' and m.group(2) == 't':
tense = '3P'
elif tense == 'P' and m.group(2) == 'st':
tense = '2P'
elif tense == 'P' and m.group(2) == 'en':
tense = '1+P'
elif m.group(2) == 'ete':
tense = '1P'
elif m.group(2) == 'etet':
# This could also be 2nd plural, in which case we'll get it wrong for weak verbs!
tense = '3P'
elif m.group(2) == 'etest':
tense = '2P'
elif m.group(2) == 'eten':
tense = '1+P' #1st or 3rd, we don't care which
elif m.group(2) == 'e':
tense = '1'
elif m.group(2) == 't':
# This could also be 2nd plural, in which case we'll get it wrong for weak verbs!
tense = '3'
elif m.group(2) == 'st':
tense = '2'
else:
raise Exception("verb doesn't match pattern: %s" % verb)

return tense

def split_compounds(self, words):

Expand Down
32 changes: 32 additions & 0 deletions src/build_tenses.py
@@ -0,0 +1,32 @@
#! /usr/bin/python
# -*- coding: utf8 -*-

__author__="daniel"
__date__ ="$Feb 27, 2014 3:17:35 PM$"

import sys

def main():
print '"tenses:"'
print "{"

for line in sys.stdin:
inf, pres, past, part = unicode(line, 'utf8').strip().split(',')

print '"%s": "INF",' % inf.split(' ')[0].replace('|', '')

if pres[-1] == unicode('ß', 'utf8'):
print '"%s": "2",' % (pres + 't')
elif pres[-2:] == unicode('ßt', 'utf8') or pres[-2:] == 'st':
print '"%s": "2",' % (pres)
else:
print '"%s": "2",' % (pres[:-1] + 'st')

print '"%s": "3",' % pres
print '"%s": "P",' % past
print '"%s": "PP",' % part.split(' ')[-1]

print "}"

if __name__ == "__main__":
main()

0 comments on commit 417d31e

Please sign in to comment.