我正在尝试理解WordNet的文件格式,主要文档是WNDB和WNINPUT。根据我对WNDB的理解,其中有称为index.something
和data.something
的文件,其中something
可以是noun, adv, vrb, adj
。
因此,如果我想了解dog
作为noun
的相关信息,我会查看index.noun
,搜索dog
这个词,这会给我一行内容:
dog n 7 5 @ ~ #m #p %p 7 1 02086723 10133978 10042764 09905672 07692347 03907626 02712903
根据WNDB文档,这行代表以下数据:
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
是一个或多个需要在data.noun
文件中查找的同义词集偏移量
好的,我知道这些指针指向某些东西,这里是WNINPUT中写的它们的描述:
@ 上位词 ~ 下位词 #m 成员整体词 #p 部分整体词 %p 部分分词
我不知道如何找到这个名词的上位词,但我们继续:
其他重要数据是synset_offset
,它们是:
02086723 10133978 10042764 09905672 07692347 03907626 02712903
让我们查看data.noun
中的第一个02086723
:
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 | 自史前时代以来由人类驯养的犬科动物(可能是从普通狼演变而来)的成员;有许多品种;“狗整晚都在吠叫”
如你所见,我们找到了以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
:两位十六进制整数,表示同义词集中词语的数量,在这种情况下是03
,意味着我们在这个同义词集中有3个词:dog 0 domestic_dog 0 Canis_familiaris 0
,每个词后面跟随一个称为的数字:
lex_id
:一位十六进制整数,当附加到lemma上时,唯一地标识词典编纂者文件中的一个意义
p_cnt: 计算指针的数量,在我们的例子中是`023`,所以我们有23个指针,哇
在p_cnt
之后,然后是指针,每个指针的格式如下:
pointer_symbol synset_offset pos source/target
其中pointer_symbol
是关于我展示的符号(如@、~等),
synset_offset
:是目标同义词集在对应于pos
的数据文件中的字节偏移量
source/target
:字段区分词汇和语义指针。这是一个四字节字段,包含两个两位的十六进制整数。前两位表示当前(源)同义词集中的词语编号,后两位表示目标同义词集中的词语编号。值为0000表示pointer_symbol代表当前(源)同义词集与由synset_offset指示的目标同义词集之间的语义关系。
好的,让我们检查第一个指针:
@ 02085998 n 0000
这是一个带有符号@
的指针,表示它是一个上位词
,并指向类型为n
(名词)的偏移量02085998
的同义词集,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 | 各种具有不可伸缩爪和通常长吻的裂足类哺乳动物
这是dog
的上位词
。所以这就是你如何找到同义词集之间的关系。我猜dog那行的指针符号只是为了告知我可以为dog这个词找到哪些类型的关系?这不是多余的吗?因为这些指针符号已经在我们看到的每个synset_offsets
中。当我们在data.noun
中查看每个synset_offset
时,我们可以看到这些指针符号,那么为什么在index.noun
文件中需要它们呢?
另外,请注意我根本没有使用词典编纂者文件。我知道在data.noun
中,具体在lex_filenum
字段中,我可以知道dog
的数据结构所在的位置,但是这个结构是做什么用的?如你所见,我可以通过查看index
和data
文件找到上位词和许多其他关系,我没有使用任何所谓的词典编纂者文件
回答:
是的,Wordnet的文档确实很难读…
你正在寻找这个页面:https://wordnet.princeton.edu/wordnet/man/lexnames.5WN.html
在WordNet的开发过程中,同义词集根据句法类别和逻辑分组被组织成45个词典编纂者文件
这些分组是与超位-下位词层次本体论并行的一些平行集群(扁平分组)。
简而言之:
从文档中:
文件格式 [词典编纂者文件在WordNet-3.0/dict/
中的]
lexnames中的每一行包含3个由制表符分隔的字段,并以换行符结束。第一个字段是两位十进制整数文件编号。(列表中的第一个文件编号为00。)第二个字段是该编号所代表的词典编纂者文件的名称,第三个字段是一个整数,表示文件中包含的同义词集的句法类别。这只是程序和脚本的快捷方式,因为句法类别也是词典编纂者文件名称的一部分。
以通俗的解释(我):
这只是你应该如何为文件中的第二列分配值的标准,例如
data.nouns
、data.verbs
等。传统上,Wordnet的创建者/维护者应该相应地命名他们的文件,但有时,将所有名词放在一起并使用索引来表示同义词集的类别会更容易。
类别的指导方针如下:
文件编号 名称 内容00 adj.all 所有形容词集群01 adj.pert 关系形容词(pertainyms)02 adv.all 所有副词03 noun.Tops 名词的唯一初学者04 noun.act 表示行为或动作的名词05 noun.animal 表示动物的名词06 noun.artifact 表示人造物体的名词07 noun.attribute 表示人和物体的属性的名词08 noun.body 表示身体部位的名词09 noun.cognition 表示认知过程和内容的名词10 noun.communication 表示沟通过程和内容的名词11 noun.event 表示自然事件的名词12 noun.feeling 表示感觉和情感的名词13 noun.food 表示食物和饮料的名词14 noun.group 表示人或物体的分组的名词15 noun.location 表示空间位置的名词16 noun.motive 表示目标的名词17 noun.object 表示自然物体(非人造)的名词18 noun.person 表示人的名词19 noun.phenomenon 表示自然现象的名词20 noun.plant 表示植物的名词21 noun.possession 表示拥有和转移拥有权的名词22 noun.process 表示自然过程的名词23 noun.quantity 表示数量和度量单位的名词24 noun.relation 表示人、物或想法之间的关系的名词25 noun.shape 表示二维和三维形状的名词26 noun.state 表示稳定状态的名词27 noun.substance 表示物质的名词28 noun.time 表示时间和时间关系的名词29 verb.body 表示梳理、穿衣和身体护理的动词30 verb.change 表示大小、温度变化、加强等的动词31 verb.cognition 表示思考、判断、分析、怀疑的动词32 verb.communication 表示告诉、询问、命令、唱歌的动词33 verb.competition 表示战斗、体育活动的动词34 verb.consumption 表示吃和喝的动词35 verb.contact 表示触摸、击打、系、挖掘的动词36 verb.creation 表示缝纫、烘焙、绘画、表演的动词37 verb.emotion 表示感觉的动词38 verb.motion 表示走、飞、游泳的动词39 verb.perception 表示看、听、感觉的动词40 verb.possession 表示买、卖、拥有的动词41 verb.social 表示政治和社会活动及事件的动词42 verb.stative 表示存在、拥有、空间关系的动词43 verb.weather 表示下雨、下雪、解冻、打雷的动词44 adj.ppl 参与形容词
因此,例如在WordNet-3.0/dict/data.noun
中,我们看到行:
00034213 03 n 01 phenomenon 0 008 @ 00029677 n 0000 ~ 11408559 n 0000 ~ 11408733 n 0000 ~ 11408914 n 0000 ~ 11410625 n 0000 ~ 11418138 n 0000 ~ 11418460 n 0000 ~ 11529295 n 0000 | 通过感官而不是直觉或推理所知的任何状态或过程 00034479 04 n 01 thing 0 001 @ 00037396 n 0000 | 一个动作;“你怎么能做这样的事?”
看第二列,对于phenomenon
,值是03
,指向noun.Tops
。
对于thing
,它的值是04
,指的是noun.act
。
依我之见,根据使用情况,这些分配可能没有用。它们主要在创建Wordnet时使用,以及我们如何将本体论层次结构轻松地展平为简单的平面集群。