Mysql
 sql >> Base de données >  >> RDS >> Mysql

Requête Wordnet pour renvoyer des exemples de phrases

Vous pouvez obtenir les phrases à partir des samples table. Ex :

SELECT sample FROM samples WHERE synsetid = 201062889;

donne :

Vous pouvez donc étendre votre requête comme suit :

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;

Remarque :La sous-sélection avec un GROUP_CONCAT renvoie les synonymes de chaque sens sous la forme d'une liste séparée par des virgules dans une seule ligne afin de réduire le nombre de lignes. Vous pouvez envisager de les renvoyer dans une requête distincte (ou dans le cadre de cette requête mais avec tout le reste en double) si vous préférez.

MISE À JOUR Si vous avez vraiment besoin de synonymes sous forme de lignes dans les résultats, ce qui suit le fera, mais je ne le recommanderais pas :les synonymes et les exemples de phrases se rapportent tous deux à une définition particulière, de sorte que l'ensemble de synonymes sera dupliqué pour chaque exemple de phrase. Par exemple. s'il y a 4 exemples de phrases et 5 synonymes pour une définition particulière, les résultats auront 4 x 5 =20 lignes uniquement pour cette définition.

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;