2016-02-24 2 views
1

У меня есть случай, когда использование у меня есть слово, и мне нужно знать следующие вещи:запроса Wordnet вернуться примерами предложений

  1. синонимов для слова (только синонимы достаточно)
  2. Всех чувств слова, где каждый смысл содержит - синонимы, соответствующие этому слову в этом смысле, пример предложений в этом смысле (если есть), часть речи для этого смысла.

Пример: this query link. Скриншот для слова carry:

enter image description here

Для каждого «смысла», мы имеем часть речи (как V), синонимы, соответствующие этому смысл, (как transport в первом смысле, pack, take в второй смысл и т. д.), например предложения, содержащие это слово в этом смысле (This train is carrying nuclear waste, carry 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';

Как получить синонимы, примеры предложения, часть речи и синонимов специфической для этого чувства для каждого чувства? Я запросил таблицы vframesentences и vframesentencemaps, увидел примеры предложений с заполнителями вроде %s и на основании столбца wordid я попытался сопоставить их с таблицей words, но получил ужасно неправильные результаты.

Edit:

Для слова 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 чувства. Как мне это сделать?

+0

Что предлагает вам информация «c.definition»? Я не знаком с базой данных WordNet. Я могу вам помочь, если вы дадите мне онлайн-документацию о том, как выглядят таблицы базы данных wordnet. «c.definition» дает вам список пулевых точек, как показано ниже? 'S: (v) транспортировать, переносить (перемещать, поддерживая либо в транспортном средстве, либо в руках, либо на своем теле)« Вы должны нести свой кемпинг »; «нести чемоданы ...» ' ' S: (v) нести, упаковать, взять (иметь с собой, иметь на себе) «Она всегда берет зонт»; «Я всегда ношу деньги»; «Она упаковывает ...» ... ' – Tin

+0

Я думаю, что' definition' содержит только определение .. – SexyBeast

ответ

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 возвращает синонимы каждого смысла в виде списка, разделенного запятыми, в одной строке, чтобы сократить количество строк. Вы можете рассмотреть возможность возврата их в отдельный запрос (или как часть этого запроса, но со всем остальным дублированным), если это необходимо.

UPDATE Если вам действительно нужно синонимы как строки в результатах, следующие будут делать это, но я бы не рекомендовал его: синонимы и примеры предложений и относятся к конкретному определению, так что множество синонимов будет дублироваться для каждого примерного предложения. Например. если есть 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; 
+0

Точно то, что мне нужно! Благодарю. Вы правы, мне нужны синонимы отдельно, пусть результаты будут дублированы. Конечно, я могу получить их в отдельном запросе или сделать его уродливым, а extract/comma проанализировать результат, чтобы получить отдельные синонимы, но лучше, если они исходят из самого запроса. Или гарантировано, что синоним не будет содержать запятую? – SexyBeast

+0

Кстати, синонимы, которые возвращаются, все с нижним. Но на самом деле, если вы ищете «Иисус», он возвращает результаты, такие как «Христос», «Деливер» и т. Д. Все капитализированные. Как я могу получить синонимы с общими данными? – SexyBeast

+0

Синонимы - это просто слова, и ни одна из них не содержит запятых: 'SELECT lemma FROM words WHERE lemma LIKE '%,%';' не возвращает результатов. Обновите ответ, чтобы включить способ получения синонимов для каждого смысла в отдельных строках. Re: Капитализация - к сожалению, это похоже на то, как слова хранятся в базе данных (см. Mysql-wn-data.sql), поэтому не так много можно сделать, кроме применения капитализации ко всем синонимам. Единственное, что можно предложить, это попробовать другой [вкус базы данных] (https://sourceforge.net/projects/wnsql/files/wnsql3/) (sqlite/standard) и посмотреть, есть ли у него такая же проблема. –

Смежные вопросы