Mysql
 sql >> Database >  >> RDS >> Mysql

Query Wordnet per restituire frasi di esempio

Puoi ottenere le frasi dai samples tavolo. Es.:

SELECT sample FROM samples WHERE synsetid = 201062889;

rendimenti:

Quindi potresti estendere la tua query come segue:

SELECT 
    a.lemma AS `word`,
    c.definition,
    c.pos AS `part of speech`,
    d.sample AS `example sentence`,
    (SELECT 
            GROUP_CONCAT(a1.lemma)
        FROM
            words a1
                INNER JOIN
            senses b1 ON a1.wordid = b1.wordid
        WHERE
            b1.synsetid = b.synsetid
                AND a1.lemma <> a.lemma
        GROUP BY b.synsetid) AS `synonyms`
FROM
    words a
        INNER JOIN
    senses b ON a.wordid = b.wordid
        INNER JOIN
    synsets c ON b.synsetid = c.synsetid
        INNER JOIN
    samples d ON b.synsetid = d.synsetid
WHERE
    a.lemma = 'carry'
ORDER BY a.lemma , c.definition , d.sample;

Nota:la sottoselezione con un GROUP_CONCAT restituisce i sinonimi di ogni senso come un elenco separato da virgole in una singola riga per ridurre il numero di righe. Potresti considerare di restituirli in una query separata (o come parte di questa query ma con tutto il resto duplicato), se preferisci.

AGGIORNAMENTO Se hai davvero bisogno di sinonimi come righe nei risultati, quanto segue lo farà ma non lo consiglierei:i sinonimi e le frasi di esempio riguardano entrambi una definizione particolare, quindi l'insieme di sinonimi verrà duplicato per ogni frase di esempio. Per esempio. se ci sono 4 frasi di esempio e 5 sinonimi per una definizione particolare, i risultati avrebbero 4 x 5 =20 righe solo per quella definizione.

SELECT 
    a.lemma AS `word`,
    c.definition,
    c.pos AS `part of speech`,
    d.sample AS `example sentence`,
    subq.lemma AS `synonym`
FROM
    words a
        INNER JOIN
    senses b ON a.wordid = b.wordid
        INNER JOIN
    synsets c ON b.synsetid = c.synsetid
        INNER JOIN
    samples d ON b.synsetid = d.synsetid
        LEFT JOIN
    (SELECT 
        a1.lemma, b1.synsetid
    FROM
        senses b1
    INNER JOIN words a1 ON a1.wordid = b1.wordid) subq ON subq.synsetid = b.synsetid
        AND subq.lemma <> a.lemma
WHERE
    a.lemma = 'carry'
ORDER BY a.lemma , c.definition , d.sample;