【问题标题】:Wordnet query to return example sentencesWordnet 查询返回例句
【发布时间】:2016-02-24 11:34:15
【问题描述】:

我有一个用例,我有一个词,我需要知道以下几点:

  1. 单词的同义词(同义词就足够了)
  2. 单词的所有含义,其中每个含义包含 - 在该含义中匹配该单词的同义词、该含义中的例句(如果存在)、该含义的词性。

示例 - this query linkcarry这个词的截图:

对于每个“意义”,我们都有词性(如V),与该意义匹配的同义词,(如第一种意义的transport,第二种意义的packtake,等等),包含该单词的例句(This train is carrying nuclear wastecarry the suitcase to the car 等在第一意义上,I always carry money 等在第二意义上等)。

如何通过Wordnet MySQL database 执行此操作?我运行了这个查询,它返回了单词的含义列表:

SELECT a.lemma, c.definition FROM words a INNER JOIN senses b ON a.wordid = b.wordid INNER JOIN synsets c ON b.synsetid = c.synsetid WHERE a.lemma = 'carry';

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

编辑:

对于单词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'

所以我现在需要的只是在 41 种感官中找到单词 carry 的例句。我该怎么做?

【问题讨论】:

  • “c.definition”给你什么?我不熟悉 WordNet 数据库。如果您向我提供有关 wordnet 数据库表外观的在线文档,我可以为您提供更多帮助。 "c.definition" 为您提供如下项目符号列表? S: (v) transport, carry (move while supporting, either in a vehicle or in one's hands or on one's body) "You must carry your camping gear"; "carry the suitcases ..."S: (v) carry, pack, take (have with oneself; have on one's person) "She always takes an umbrella"; "I always carry money"; "She packs ..." ...
  • 我认为definition 只是提供了定义..

标签: mysql sql words wordnet lexicon


【解决方案1】:

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

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;

注意:带有GROUP_CONCAT 的子选择将每个意义的同义词作为逗号分隔的列表返回到单行中,以减少行数。如果愿意,您可以考虑在单独的查询中返回这些(或作为此查询的一部分,但其他所有内容都重复)。

更新 如果您确实需要将同义词作为结果中的行,则可以使用以下方法,但我不建议这样做:同义词和例句都属于特定定义,因此每个例句都会重复同义词集。例如。如果某个特定定义有 4 个例句和 5 个同义词,则结果将有 4 x 5 = 20 行仅针对该定义。

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;

【讨论】:

  • 正是我需要的!谢谢。你是对的,我需要单独的同义词,让结果重复。当然,我可以在单独的查询中获取它们,或者使其变得丑陋并提取/逗号解析结果以获取单个同义词,但如果它们来自查询本身则更好。还是保证没有同义词不包含逗号?
  • 顺便说一句,返回的同义词都是小写的。但在实际网站中,如果您搜索 Jesus,它会返回 ChristDeliverer 等全部大写的结果。如何获得正确大小写的同义词?
  • 同义词只是单词,不包含逗号:SELECT lemma FROM words WHERE lemma LIKE '%,%'; 不返回任何结果。已更新答案,以包含一种在各个行中获取每种含义的同义词的方法。回复:大写 - 不幸的是,这似乎是单词在数据库中的存储方式(参见 mysql-wn-data.sql),所以除了对所有同义词应用大写之外,没有什么可以做的。唯一要建议的可能是尝试不同的database flavour(sqlite / 标准),看看它是否有同样的问题。
  • 对了,和这个问题没有关系,但是还是想知道,同一个词的不同形式怎么找?例如,show 一词在表 words 中不存在。然而,它的另一种形式show 在那里。如果一个表单不存在,我该如何查询,返回当前表单?
  • 您的意思是要限制返回的行数吗?如果是这样,请使用LIMIT 子句。
猜你喜欢
  • 1970-01-01
  • 2011-12-25
  • 1970-01-01
  • 1970-01-01
  • 2018-07-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多