sql >> Database >  >> RDS >> Mysql

Wordnet-query om voorbeeldzinnen te retourneren

U kunt de zinnen uit de samples . halen tafel. Bijv.:

SELECT sample FROM samples WHERE synsetid = 201062889;

opbrengsten:

U kunt uw zoekopdracht dus als volgt uitbreiden:

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;

Opmerking:de subselect met een GROUP_CONCAT retourneert de synoniemen van elk zintuig als een door komma's gescheiden lijst in een enkele rij om het aantal rijen te verminderen. U kunt overwegen deze in een aparte zoekopdracht te retourneren (of als onderdeel van deze zoekopdracht, maar met al het andere gedupliceerd) indien gewenst.

UPDATE Als je echt synoniemen als rijen in de resultaten nodig hebt, is het volgende voldoende, maar ik zou het niet aanraden:Synoniemen en voorbeeldzinnen hebben beide betrekking op een bepaalde definitie, dus de reeks synoniemen wordt voor elke voorbeeldzin gedupliceerd. bijv. als er 4 voorbeeldzinnen en 5 synoniemen zijn voor een bepaalde definitie, zouden de resultaten 4 x 5 =20 rijen hebben, alleen voor die definitie.

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;



  1. hoe Mysql te starten in git bash in Windows 8.1

  2. Voorloop- en/of volgspaties van een tekenreeks verwijderen in T-SQL

  3. Match en Against gebruiken in MySQL en CodeIgniter

  4. sql selecteer elke maand top 5