Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Consulta Wordnet para retornar frases de exemplo


Você pode obter as frases dos samples tabela. Por exemplo:
SELECT sample FROM samples WHERE synsetid = 201062889;

rendimentos:

Então você pode estender sua consulta da seguinte forma:
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:A subseleção com um GROUP_CONCAT retorna os sinônimos de cada sentido como uma lista separada por vírgulas em uma única linha para reduzir o número de linhas. Você pode considerar devolvê-los em uma consulta separada (ou como parte dessa consulta, mas com todo o resto duplicado), se preferir.

ATUALIZAÇÃO Se você realmente precisar de sinônimos como linhas nos resultados, o seguinte fará isso, mas eu não recomendaria:Sinônimos e frases de exemplo pertencem a uma definição específica, portanto, o conjunto de sinônimos será duplicado para cada frase de exemplo. Por exemplo. se houver 4 frases de exemplo e 5 sinônimos para uma definição específica, os resultados teriam 4 x 5 =20 linhas apenas para essa definição.
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;