Seite 1 von 1

Vokabeltrainer

Verfasst: Montag 15. Februar 2016, 00:47
von meego
Hallo

Ich möchte eine Art Vokabeltabelle anlegen, damit Asylbewerber Deutsch lernen können (soll natürlich auch umgekehrt und mit weiteren Sprachen funktionieren). Dazu sollen für Worte Symbolbilder verfügbar sein. Hat jemand Erfahrung mit Vocabeltrainer und Sqlalchemy (mir wurde nämlich gesagt, dass selbstreferentielle Many-to-Many-Tabellen nicht gerade etwas für Anfänger sind). Habe einmal folgende Modelle gemacht (VocWord wäre die Tabelle für Nomen). Mehrere Worteinträge könnten wie ich das sehe auf dasselbe Bild referieren, mehrere Bilder aber auch wieder auf dasselbe Wort. Benötige ich also analog eine Tabelle wie translation_by_image? Und wie ist das mit Dialekten? Im Arabischen werden Worte im Maghreb anders als in Agypten und wiederum sehr anders als in Syrien ausgesprochen (es gibt auch Worte, die nur in bestimmten Dialekten verfügbar sind). Offenbar kein sehr triviales Problem :) . Inwiefern Babelex da noch eine Vereinfachung sein könnte, weiss ich nicht. :

Code: Alles auswählen

translation_by_meaning = db.Table('voc_translation_by_meaning',
    db.Column('voc_word_1', db.Integer, db.ForeignKey('voc_word.id')),
    db.Column('voc_word_2', db.Integer, db.ForeignKey('voc_word.id'))
    )

class VocWord(db.Model):
    __tablename__ = 'voc_word'

    id = db.Column(db.Integer, primary_key=True)
    voc_language_id = db.Column(db.Integer, db.ForeignKey('voc_language.id'))
    language = db.relationship('VocLanguage', backref="words")
    translation = db.relationship('VocWord', secondary=translation_by_meaning,
        backref=db.backref('backtranslation', lazy='dynamic'), primaryjoin=id == translation_by_meaning.c.voc_word_1, secondaryjoin=id == translation_by_meaning.c.voc_word_2)
    created = db.Column(db.DateTime)
    last_update = db.Column(db.DateTime)
    word = db.Column(db.String)
    word_latin = db.Column(db.String)
    gender = db.Column(db.String)
    defined_article = db.Column(db.String)
    undefined_article = db.Column(db.String)
    word_pl = db.Column(db.String)
    defined_article_pl = db.Column(db.String)
    undefined_article = db.Column(db.String)
    voice_file = db.Column(db.String) # mp3

class VocImage(db.Model):
    __tablename__ = 'voc_image'

    id = db.Column(db.Integer, primary_key = True)
    created = db.Column(db.DateTime)
    filename = db.Column(db.String)

class VocLanguage(db.Model):
    __tablename__ = 'voc_language'

    id = db.Column(db.Integer, primary_key = True)
    dialects = db.relationship('VocDialect', backref='language', lazy=False)
    language = db.Column(db.String)

class VocDialect(db.Model):
    __tablename__ = 'voc_dialect'

    id = db.Column(db.Integer, primary_key = True)
    language_id = db.Column(
        db.Integer, db.ForeignKey('language.id'))
    dialect = db.Column(db.String)

Re: Vokabeltrainer

Verfasst: Montag 15. Februar 2016, 10:55
von BlackJack
@meego: Nebenfrage: Was sollen die ganzen Voc-Präfixe? Für so etwas gibt es Namensräume.

Re: Vokabeltrainer

Verfasst: Montag 15. Februar 2016, 13:24
von meego
Hallo Blackjack. Ich habe die Modelle in einem Projekt gemacht, in welchem ich bereits andere Modelle habe. Namensräume?

Re: Vokabeltrainer

Verfasst: Dienstag 23. Februar 2016, 15:20
von meego
Na? Seid ihr auch sprachlos? :mrgreen:

Re: Vokabeltrainer

Verfasst: Dienstag 23. Februar 2016, 19:00
von noisefloor
Hallo,

wenn ich so was programmieren wollte, würde ich tendenziell wohl eher CouchDB als DB nutzen. Ob sich das bewähren würde, würde ich wahrscheinlich aber erst im Laufe der Programmierung herausstellen :-)

Gruß, noisefloor