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.或者可以保证任何同义词都不包含逗号吗?顺便问一下,返回的同义词都是小写的。但是在实际的网站上,如果你搜索sayJesus
,它会返回像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;