sql >> Base de Datos >  >> RDS >> Mysql

Consulta de Wordnet para devolver oraciones de ejemplo

Puede obtener las oraciones de las samples mesa. Por ejemplo:

SELECT sample FROM samples WHERE synsetid = 201062889;

rendimientos:

Por lo tanto, podría ampliar su consulta de la siguiente manera:

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 subselección con un GROUP_CONCAT devuelve los sinónimos de cada sentido como una lista separada por comas en una sola fila para reducir el número de filas. Podría considerar devolverlos en una consulta separada (o como parte de esta consulta pero con todo lo demás duplicado) si lo prefiere.

ACTUALIZAR Si realmente necesita sinónimos como filas en los resultados, lo siguiente lo hará, pero no lo recomendaría:los sinónimos y las oraciones de ejemplo pertenecen a una definición particular, por lo que el conjunto de sinónimos se duplicará para cada oración de ejemplo. P.ej. si hay 4 oraciones de ejemplo y 5 sinónimos para una definición en particular, los resultados tendrían 4 x 5 =20 filas solo para esa definición.

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;