Mysql 返回示例语句的Wordnet查询

Mysql 返回示例语句的Wordnet查询,mysql,sql,words,wordnet,lexicon,Mysql,Sql,Words,Wordnet,Lexicon,我有一个用例,其中我有一个单词,我需要知道以下事项: 单词的同义词(仅同义词就足够了) 这个词的所有意义,每个意义都包含——与这个意义上的词相匹配的同义词,这个意义上的例句(如果有的话),这个意义上的词性 例如-。单词carry的屏幕截图: 对于每个“意义”,我们都有词性(如V),与该意义匹配的同义词(如第一个意义上的transport,pack,take,第二个意义上的等),包含该意义上的单词的示例句(这列火车载着核废料,把手提箱拿到车上等等,第一种感觉,我总是带钱等等,第二种感觉,等等)

我有一个用例,其中我有一个单词,我需要知道以下事项:

  • 单词的同义词(仅同义词就足够了)
  • 这个词的所有意义,每个意义都包含——与这个意义上的词相匹配的同义词,这个意义上的例句(如果有的话),这个意义上的词性
  • 例如-。单词
    carry
    的屏幕截图:

    对于每个“意义”,我们都有词性(如
    V
    ),与该意义匹配的同义词(如第一个意义上的
    transport
    pack
    take
    ,第二个意义上的等),包含该意义上的单词的示例句(
    这列火车载着核废料
    把手提箱拿到车上
    等等,第一种感觉,
    我总是带钱
    等等,第二种感觉,等等)

    如何从a中执行此操作?我运行了此查询,它返回单词的含义列表:

    从单词a中选择a.lemma,c.definition,a.wordid=b.wordid内部连接词组b.synsetid=c.synsetid,其中a.lemma='carry';

    如何获取每个意义的同义词、示例句、词性和特定于该意义的同义词?我查询了
    vFrameSequences
    vFrameSequenceMaps
    表,看到了带有占位符的示例句,如
    %s
    ,并根据
    wordid
    列,尝试将它们与
    wor匹配ds
    表,但得到了非常错误的结果

    编辑:

    对于单词
    carry
    ,如果我运行这些查询,我会正确获得同义词和意义:

    1. select * from words where lemma='carry' //yield wordid as 21354
    2. select * from senses where wordid=21354 //yield 41 sysnsetids, like 201062889
    3. select * from synsets where synsetid=201062889 //yields the explanation "serve as a means for expressing something"
    4. select * from senses where synsetid=20106288` /yields all matching synonyms for that sense as wordids, including "carry" - like 21354, 29630, 45011
    5. select * from words where wordid=29630 //yields 'convey'
    

    因此,我现在需要的是找到单词
    carry
    在41个词义中的示例句子。我该怎么做?

    您可以从
    示例表中获取句子。例如:

    SELECT sample FROM samples WHERE synsetid = 201062889;
    
    收益率:

    玛丽的画承载着母爱

    他的声音里充满了愤怒

    因此,您可以按如下方式扩展查询:

    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;
    

    “c.definition”给了你什么?我不熟悉WordNet数据库。如果你给我有关WordNet数据库表外观的在线文档,我可以为你提供更多帮助。“c.definition”给你一个要点列表,如下所示:
    S:(v)运输,运输(在车上、手上或身上支撑时移动)“你必须带上你的野营装备”;“提着手提箱……”
    s:(v)携带、打包、带走(随身携带;随身携带)“她总是带着伞”;“我总是带着钱”;“她打包……”…
    我认为
    definition
    只提供了定义..正是我所需要的!谢谢。你是对的,我需要单独的同义词,让结果重复。当然,我可以在单独的查询中获得它们,或者使其难看并提取/逗号解析结果以获得单独的同义词,但如果它们来自其查询,则更好elf.或者可以保证任何同义词都不包含逗号吗?顺便问一下,返回的同义词都是小写的。但是在实际的网站上,如果你搜索say
    Jesus
    ,它会返回像
    Christ
    Deliver
    等都大写的结果。我如何得到正确大小写的同义词呢?同义词只是单词,没有意义tain逗号:
    从诸如“%”、%”等引理的单词中选择引理;
    不返回任何结果。已更新答案,以包含一种获取单个行中每个意义的同义词的方法。Re:capitalized-不幸的是,这些单词似乎是如何存储在数据库中的(请参阅mysql wn data.sql)所以除了对所有同义词应用大写之外,没有什么可以做的了。唯一可以建议的是尝试不同的(sqlite/standard)顺便问一下,它与这个问题无关,但我仍然想知道,如何找到同一个单词的不同形式?例如,表
    words
    中没有单词
    show
    。但是它的另一种形式
    show
    存在。如果一种形式不存在,我如何查询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;