Я пытаюсь понять форматы файлов WordNet, а основными документами являются WNDB и WNINPUT. Как я понял в WNDB, есть файлы, называемые index.something
и data.something
, где это something
может быть noun, adv, vrb, adj
.Что такое файлы лексикографа WordNet? Понимание того, как работает WordNet
Так что, если я хочу знать кое-что о слове dog
как noun
, я смотрел в index.noun
, поиск слова dog
, что дает мне строку:
dog n 7 5 @ ~ #m #p %p 7 1 02086723 10133978 10042764 09905672 07692347 03907626 02712903
Согласно WNDB documment, эта линия представляет эти данные:
lemma pos synset_cnt p_cnt [ptr_symbol...] sense_cnt tagsense_cnt synset_offset [synset_offset...]
Где lemma
слово, pos
является идентификатором, который говорит, что это существительное, synset_cnt
рассказывает нам, сколько синсетов это слово включено, p_cnt
сообщает нам, сколько указателей на эти синтезаты у нас есть, [ptr_symbol]
- это массив указателей, sense_cnt
и tagsense_cnt
Я не понял и хотел бы получить объяснение, а synset_offset
- это один или больше synsets следует искать в data.noun
файл
Ok, так что я знаю, эти указатели указывают на то, а вот их описание, как написано в WNINPUT:
@ Hypernym
~ Hyponym
#m Member holonym
#p Part holonym
%p Part meronym
Я не знаю, как найти a Hypernym для этого существительного, но давайте продолжим:
Другие важные данные являются synset_offset
s, которые являются:
02086723 10133978 10042764 09905672 07692347 03907626 02712903
Давайте посмотрим на первый, 02086723
в data.noun
:
02086723 05 n 03 dog 0 domestic_dog 0 Canis_familiaris 0 023 @ 02085998 n 0000 @ 01320032 n 0000 #m 02086515 n 0000 #m 08011383 n 0000 ~ 01325095 n 0000 ~ 02087384 n 0000 ~ 02087513 n 0000 ~ 02087924 n 0000 ~ 02088026 n 0000 ~ 02089774 n 0000 ~ 02106058 n 0000 ~ 02112993 n 0000 ~ 02113458 n 0000 ~ 02113610 n 0000 ~ 02113781 n 0000 ~ 02113929 n 0000 ~ 02114152 n 0000 ~ 02114278 n 0000 ~ 02115149 n 0000 ~ 02115478 n 0000 ~ 02115987 n 0000 ~ 02116630 n 0000 %p 02161498 n 0000 | a member of the genus Canis (probably descended from the common wolf) that has been domesticated by man since prehistoric times; occurs in many breeds; "the dog barked all night"
Как вы можете видеть, мы нашли строка, начинающаяся с 02086723
.Содержимое этой линии описаны в WNDB как:
synset_offset lex_filenum ss_type w_cnt word lex_id [word lex_id...] p_cnt [ptr...] [frames...] | gloss
synset_offset мы уже знаем,
lex_filenum
говорит, в каком из файла лексикографов наше слово (это та часть, что я не понимаю большинство),
ss_type
является n
, который говорит нам, что это существительное,
w_cnt
: две цифры шестнадцатеричное целое число, указывающее количество слов в synset, который в данном случае является 03
, что означает, что мы имеем 3 слова в этом synset: dog 0 domestic_dog 0 Canis_familiaris 0
, каждый из которых следует число называется:
lex_id
: одна цифра шестнадцатеричное целое, что, когда добавляется на лемму, однозначно определяет смысл в лексикограф файл
p_cnt: counts the number of pointers, which in our case is `023`, so we have 23 pointers, wow
После p_cnt
, затем приходит указатели, каждый из которых в формате:
pointer_symbol synset_offset pos source/target
Где pointer_symbol
о символах, как те, которые я показал (@, ~, ...),
synset_offset
: это смещение байта целевой synset в файле данных, соответствующий pos
source/target
: поле различает лексические и семантические указатели. Это поле с четырьмя байтами, содержащее два двухзначных шестнадцатеричных числа. Первые две цифры указывают номер слова в текущем (исходном) синхронисте, последние две цифры указывают номер слова в целевом синхронизируемом сигнале. Значение 0000 означает, что pointer_symbol представляет собой семантическую связь между текущей (исходной) синхронизацией и целевой синхронизацией, указанной synset_offset.
Итак, давайте рассмотрим первый указатель:
@ 02085998 n 0000
Это указатель с символом @
, указывая на это Hypernym
, и указывает на synset wiuth смещения 02085998
типа n
(существительное), и source/target
является 0000
Когда я искать в data.noun, я получаю
02085998 05 n 02 canine 0 canid 0 011 @ 02077948 n 0000 #m 02085690 n 0000 + 02688440 a 0101 ~ 02086324 n 0000 ~ 02086723 n 0000 ~ 02116752 n 0000 ~ 02117748 n 0000 ~ 02117987 n 0000 ~ 02119787 n 0000 ~ 02120985 n 0000 %p 02442560 n 0000 | any of various fissiped mammals with nonretractile claws and typically long muzzles
, который является Hypernym
от dog
. Так вот как вы находите отношения между синтезами. Я предполагаю, что символы указателя в строке для собаки были только для того, чтобы сообщить, какие типы отношений я мог бы найти для слова «собака»? Разве это не избыточно? Поскольку эти символы указателя уже находятся в каждом из synset_offsets
, как мы видели. Когда мы смотрим на каждый synset_offset
в data.noun
, мы можем видеть эти символы указателя, поэтому зачем они нужны в файле index.noun
?
Также см., Что я вообще не использовал файл лексикографов. Я знаю, что в data.noun
, в частности в поле lex_filenum
, я могу узнать, где находится структура данных для dog
, но Что это за структура для?Как вы можете видеть, я мог бы найти hypernym, и многие другие отношения, просто посмотрев на index
и data
файлов, я не использовал какой-либо из так называемых лексикограф файлов
Очень хороший вопрос! – alvas
@alvas спасибо, я пытался сделать его информативным, чтобы люди могли его найти и понять, как работает wordnet, мне было трудно, не было никаких документов, кроме официальной документации, слишком сложной. Я пишу что-то, чтобы разобрать wordnet на другие языки, следите за обновлениями :) –
О, не воссоздавайте колесо, если это не нужно или не весело. Посмотрите на реализации, уже доступные в 'nltk' (https://github.com/nltk/nltk/blob/develop/nltk/corpus/reader/wordnet.py) или http://projects.csail.mit.edu/jwi/ – alvas