From febdcc69314362d2f1e4ab6c35644000cc8b7a8a Mon Sep 17 00:00:00 2001 From: Eric Kafe Date: Thu, 22 Feb 2024 13:17:43 +0100 Subject: [PATCH] Add wn_morphy.pl --- .gitignore | 1 + Makefile | 17 +- README.md | 4 + doc/prologdb.5 | 169 +- doc/prologdb.5.pdf | Bin 12491 -> 0 bytes doc/prologdb.5.ps | Bin 33757 -> 0 bytes doc/prologdb.5WN.html | 1229 +++++-- doc/prologdb.pdf | Bin 0 -> 28331 bytes doc/prologdb.ps | Bin 0 -> 27073 bytes output/wn_valid.pl-Output-3.0BF | 8 +- pred_format.pl | 18 - prolog/wn_exc.pl | 6050 +++++++++++++++++++++++++++++++ wn2csv.pl | 6 +- wn_load.pl | 13 +- wn_morphy.pl | 67 + wn_valid.pl | 5 +- 16 files changed, 7114 insertions(+), 473 deletions(-) create mode 100644 .gitignore delete mode 100644 doc/prologdb.5.pdf delete mode 100644 doc/prologdb.5.ps create mode 100644 doc/prologdb.pdf create mode 100644 doc/prologdb.ps delete mode 100644 pred_format.pl create mode 100644 prolog/wn_exc.pl create mode 100644 wn_morphy.pl diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..cba7efc --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +a.out diff --git a/Makefile b/Makefile index 331ea14..4623600 100644 --- a/Makefile +++ b/Makefile @@ -1,7 +1,22 @@ # wordnet-prolog utilities (c) 2017-20 Eric Kafe # License: CC BY 4.0, https://creativecommons.org/licenses/by/4.0/ -all: valid query csv +all: doc valid query csv + +# Groff is required for building the documentation +doc: html pdf ps + +html: +# Needs the 'groff' package + @groff -mandoc -Thtml doc/prologdb.5>doc/prologdb.5WN.html + +pdf: +# Needs the 'groff' package + @groff -mandoc -Tpdf doc/prologdb.5>doc/prologdb.pdf + +ps: +# Needs the 'groff' package + @groff -mandoc -Tps doc/prologdb.5>doc/prologdb.ps query: @echo Testing example queries... diff --git a/README.md b/README.md index 4e0f406..604526d 100644 --- a/README.md +++ b/README.md @@ -45,6 +45,7 @@ only unique clauses: - wn_cs.pl: 220 - wn_der.pl: 74821 - wn_ent.pl: 408 +- wn_exc.pl: 6050 - wn_fr.pl: 21647 - wn_g.pl: 117659 - wn_hyp.pl: 89089 @@ -69,6 +70,9 @@ Prolog versions of WordNet 3.1 and English WordNet 2020. ## Utilities: +_wn_morphy.pl_ is a SWI-prolog lemmatizer, similar to _morphy_, +the morphological processor from WordNet. + _wn_valid.pl_ is a SWI-prolog program testing for some potential issues in WordNet: - check_keys: ambiguous sense keys, pointing to more than one synset diff --git a/doc/prologdb.5 b/doc/prologdb.5 index b2441dc..a15d0c8 100644 --- a/doc/prologdb.5 +++ b/doc/prologdb.5 @@ -1,10 +1,10 @@ .\" $Id$ .tr ~ -.TH PROLOGDB 5WN "Dec 2006" "WordNet 3.0" "WordNet\(tm File Formats" +.TH PROLOGDB 5WN "Jun 2021" "WordNet 3.1" "WordNet\(tm File Formats" .SH NAME wn_\*.pl \- description of Prolog database files .SH DESCRIPTION -The files \fBwn_\fP\fI*\fP\fB.pl\fP contain the WordNet database in a +The files \fBwn_\fR\fI*\fR\fB.pl\fR contain the WordNet database in a prolog-readable format. A prolog interface to WordNet is not implemented. @@ -13,21 +13,21 @@ into the Prolog workspace. A separate file has been created for each WordNet relation giving the user the ability to load only those parts of the database that they are interested. -See \fBFILES\fP, below, for a list of the database files and +See \fBFILES\fR, below, for a list of the database files and .BR wndb (5WN) and .BR wninput (5WN) for detailed descriptions of the various WordNet relations (referred to -as \fIoperators\fP in this manual page). +as \fIoperators\fR in this manual page). .SS File Format Each prolog database file contains information corresponding to the synsets and word senses contained in the WordNet database. In the -prolog version of the database, the \fIsynset_id\fPs (defined below) +prolog version of the database, the \fIsynset_id\fRs (defined below) are used as unique synset identifiers. Each line of a file contains an operator that corresponds to a WordNet -relation. All lines with the same \fIoperator\fP value are stored in -the file \fBwn_\fP\fIoperator\fP\fB.pl\fP. +relation. All lines with the same \fIoperator\fR value are stored in +the file \fBwn_\fR\fIoperator\fR\fB.pl\fR. The general format of a line in a prolog database file is as follows: @@ -43,24 +43,25 @@ and a period. Note there are no spaces, and each line is terminated with a newline character. .SS Operators Each WordNet relation is represented in a separate file by -\fIoperator\fP name. Some operators are reflexive (i.e. the "reverse" -relation is implicit). So, for example, if \fBx\fP is a hypernym of -\fBy\fP, \fBy\fP is necessarily a hyponym of \fBx\fP. In the prolog +\fIoperator\fR name. Some operators are reflexive (i.e. the "reverse" +relation is implicit). So, for example, if \fBx\fR is a hypernym of +\fBy\fR, \fBy\fR is necessarily a hyponym of \fBx\fR. In the prolog database, reflected pointers are usually implied for semantic relations. -Semantic relations are represented by a pair of \fIsynset_id\fPs, in -which the first \fIsynset_id\fP is generally the source of the +Semantic relations are represented by a pair of \fIsynset_id\fRs, in +which the first \fIsynset_id\fR is generally the source of the relation and the second is the target. If two pairs -\fIsynset_id\fP\fB,\fP\fIw_num\fP are present, the operator represents +\fIsynset_id\fR\fB,\fR\fIw_num\fR are present, the operator represents a lexical relation between word forms. .nf \fBs(\fIsynset_id\fB,\fIw_num\fB,'\fIword\fB',\fIss_type\fB,\fIsense_number\fB,\fItag_count\fB). .fi .RS -A \fBs\fP operator is present for every word sense in WordNet. In -\fBwn_s.pl\fP, \fIw_num\fP specifies the word number for \fIword\fP in +.PP +A \fBs\fR operator is present for every word sense in WordNet. In +\fBwn_s.pl\fR, \fIw_num\fR specifies the word number for \fIword\fR in the synset. .RE @@ -68,7 +69,8 @@ the synset. \fBsk(\fIsynset_id\fB,\fIw_num\fB,'\fIsense_key\fB'). .fi .RS -A \fBsk\fP operator is present for every word sense in WordNet. This gives +.PP +A \fBsk\fR operator is present for every word sense in WordNet. This gives the WordNet sense key for each word sense. .RE @@ -76,14 +78,16 @@ the WordNet sense key for each word sense. \fBg(\fIsynset_id\fB,'\fIgloss\fB'). .fi .RS -The \fBg\fP operator specifies the gloss for a synset. +.PP +The \fBg\fR operator specifies the gloss for a synset. .RE .nf \fBsyntax(\fIsynset_id\fB,\fIw_num\fB,\fIsyntax\fB). .fi .RS -The \fBsyntax\fP operator specifies the syntactic marker for a given word sense +.PP +The \fBsyntax\fR operator specifies the syntactic marker for a given word sense if one is specified. .RE @@ -91,7 +95,8 @@ if one is specified. \fBhyp(\fIsynset_id\fB,\fIsynset_id\fB). .fi .RS -The \fBhyp\fP operator specifies that the second synset is a +.PP +The \fBhyp\fR operator specifies that the second synset is a hypernym of the first synset. This relation holds for nouns and verbs. The reflexive operator, hyponym, implies that the first synset is a hyponym of the second synset. @@ -101,7 +106,8 @@ synset is a hyponym of the second synset. \fBins(\fIsynset_id\fB,\fIsynset_id\fB). .fi .RS -The \fBins\fP operator specifies that the first synset is an +.PP +The \fBins\fR operator specifies that the first synset is an instance of the second synset. This relation holds for nouns. The reflexive operator, has_instance, implies that the second synset is an instance of the first synset. @@ -111,7 +117,8 @@ first synset. \fBent(\fIsynset_id\fB,\fIsynset_id\fB). .fi .RS -The \fBent\fP operator specifies that the second synset is +.PP +The \fBent\fR operator specifies that the second synset is an entailment of first synset. This relation only holds for verbs. .RE @@ -119,7 +126,8 @@ an entailment of first synset. This relation only holds for verbs. \fBsim(\fIsynset_id\fB,\fIsynset_id\fB). .fi .RS -The \fBsim\fP operator specifies that the second synset is similar in +.PP +The \fBsim\fR operator specifies that the second synset is similar in meaning to the first synset. This means that the second synset is a satellite the first synset, which is the cluster head. This relation only holds for adjective synsets contained in adjective clusters. @@ -129,7 +137,8 @@ only holds for adjective synsets contained in adjective clusters. \fBmm(\fIsynset_id\fB,\fIsynset_id\fB). .fi .RS -The \fBmm\fP operator specifies that the second synset is a +.PP +The \fBmm\fR operator specifies that the second synset is a member meronym of the first synset. This relation only holds for nouns. The reflexive operator, member holonym, can be implied. .RE @@ -138,7 +147,8 @@ nouns. The reflexive operator, member holonym, can be implied. \fBms(\fIsynset_id\fB,\fIsynset_id\fB). .fi .RS -The \fBms\fP operator specifies that the second synset is a +.PP +The \fBms\fR operator specifies that the second synset is a substance meronym of the first synset. This relation only holds for nouns. The reflexive operator, substance holonym, can be implied. .RE @@ -147,7 +157,8 @@ nouns. The reflexive operator, substance holonym, can be implied. \fBmp(\fIsynset_id\fB,\fIsynset_id\fB). .fi .RS -The \fBmp\fP operator specifies that the second synset is a +.PP +The \fBmp\fR operator specifies that the second synset is a part meronym of the first synset. This relation only holds for nouns. The reflexive operator, part holonym, can be implied. .RE @@ -156,7 +167,8 @@ nouns. The reflexive operator, part holonym, can be implied. \fBder(\fIsynset_id\fB,\fIsynset_id\fB). .fi .RS -The \fBder\fP operator specifies that there exists a reflexive lexical +.PP +The \fBder\fR operator specifies that there exists a reflexive lexical morphosemantic relation between the first and second synset terms representing derivational morphology. .RE @@ -165,7 +177,8 @@ representing derivational morphology. \fBcls(\fIsynset_id\fB,\fIw_num\fB,\fIsynset_id\fB,\fIw_num\fB,\fIclass_type\fB). .fi .RS -The \fBcls\fP operator specifies that the first synset has been +.PP +The \fBcls\fR operator specifies that the first synset has been classified as a member of the class represented by the second synset. Either of the \fIw_num\fB's can be 0, reflecting that the pointer is semantic in the original WordNet database. @@ -175,7 +188,8 @@ original WordNet database. \fBcs(\fIsynset_id\fB,\fIsynset_id\fB). .fi .RS -The \fBcs\fP operator specifies that the second synset is a cause +.PP +The \fBcs\fR operator specifies that the second synset is a cause of the first synset. This relation only holds for verbs. .RE @@ -183,7 +197,8 @@ of the first synset. This relation only holds for verbs. \fBvgp(\fIsynset_id\fB,\fIw_num\fB,\fIsynset_id\fB,\fIw_num\fB). .fi .RS -The \fBvgp\fP operator specifies verb synsets that are similar in +.PP +The \fBvgp\fR operator specifies verb synsets that are similar in meaning and should be grouped together when displayed in response to a grouped synset search. .RE @@ -192,9 +207,10 @@ grouped synset search. \fBat(\fIsynset_id\fB,\fIsynset_id\fB). .fi .RS -The \fBat\fP operator defines the attribute relation between noun and +.PP +The \fBat\fR operator defines the attribute relation between noun and adjective synset pairs in which the adjective is a value of the noun. -For each pair, both relations are listed (ie. each \fIsynset_id\fP is +For each pair, both relations are listed (ie. each \fIsynset_id\fR is both a source and target). .RE @@ -202,17 +218,19 @@ both a source and target). \fBant(\fIsynset_id\fB,\fIw_num\fB,\fIsynset_id\fB,\fIw_num\fB). .fi .RS -The \fBant\fP operator specifies antonymous \fIword\fPs. This is a +.PP +The \fBant\fR operator specifies antonymous \fIword\fRs. This is a lexical relation that holds for all syntactic categories. For each antonymous pair, both relations are listed (ie. each -\fIsynset_id,w_num\fP pair is both a source and target word.) +\fIsynset_id,w_num\fR pair is both a source and target word.) .RE .nf \fBsa(\fIsynset_id\fB,\fIw_num\fB,\fIsynset_id\fB,\fIw_num\fB). .fi .RS -The \fBsa\fP operator specifies that additional information about the +.PP +The \fBsa\fR operator specifies that additional information about the first word can be obtained by seeing the second word. This operator is only defined for verbs and adjectives. There is no reflexive relation (ie. it cannot be inferred that the additional information @@ -223,7 +241,8 @@ about the second word can be obtained from the first word). \fBppl(\fIsynset_id\fB,\fIw_num\fB,\fIsynset_id\fB,\fIw_num\fB). .fi .RS -The \fBppl\fP operator specifies that the adjective first word is a +.PP +The \fBppl\fR operator specifies that the adjective first word is a participle of the verb second word. The reflexive operator can be implied. .RE @@ -232,7 +251,8 @@ implied. \fBper(\fIsynset_id\fB,\fIw_num\fB,\fIsynset_id\fB,\fIw_num\fB). .fi .RS -The \fBper\fP operator specifies two different relations based on the +.PP +The \fBper\fR operator specifies two different relations based on the parts of speech involved. If the first word is in an adjective synset, that word pertains to either the noun or adjective second word. If the first word is in an adverb synset, that word is derived @@ -240,91 +260,92 @@ from the adjective second word. .RE .nf -\fBfr(\fIsynset_id\fB,\fIf_num\fB,\fIw_num\fB). +\fBfr(\fIsynset_id\fB,\fIw_num\fB,\fIf_num\fB). .fi .RS -The \fBfr\fP operator specifies a generic sentence frame for one or +.PP +The \fBfr\fR operator specifies a generic sentence frame for one or all words in a synset. The operator is defined only for verbs. .RE .SS Field Definitions -A \fIsynset_id\fP is a nine byte field in which the first +A \fIsynset_id\fR is a nine byte field in which the first byte defines the syntactic category of the synset and the remaining -eight bytes are a \fIsynset_offset\fP, as defined in +eight bytes are a \fIsynset_offset\fR, as defined in .BR wndb (5WN), -indicating the byte offset in the \fBdata.\fP\fIpos\fP file that +indicating the byte offset in the \fBdata.\fR\fIpos\fR file that corresponds to the syntactic category. The syntactic category is encoded as: .RS .nf -\fB1\fP NOUN -\fB2\fP VERB -\fB3\fP ADJECTIVE -\fB4\fP ADVERB +\fB1\fR NOUN +\fB2\fR VERB +\fB3\fR ADJECTIVE +\fB4\fR ADVERB .fi .RE -\fIw_num\fP, if present, indicates which word in the synset is being -referred to. Word numbers are assigned to the \fIword\fP fields in a +\fIw_num\fR, if present, indicates which word in the synset is being +referred to. Word numbers are assigned to the \fIword\fR fields in a synset, from left to right, beginning with 1. When used to represent -lexical WordNet relations \fIw_num\fP may be 0, indicating that the +lexical WordNet relations \fIw_num\fR may be 0, indicating that the relation holds for all words in the synset indicated by the preceding -\fIsynset_id\fP. See +\fIsynset_id\fR. See .BR wninput (5WN) for a discussion of semantic and lexical relations. -\fIss_type\fP is a one character code indicating the synset type: +\fIss_type\fR is a one character code indicating the synset type: .RS .nf -\fBn\fP NOUN -\fBv\fP VERB -\fBa\fP ADJECTIVE -\fBs\fP ADJECTIVE~SATELLITE -\fBr\fP ADVERB +\fBn\fR NOUN +\fBv\fR VERB +\fBa\fR ADJECTIVE +\fBs\fR ADJECTIVE~SATELLITE +\fBr\fR ADVERB .fi .RE -\fIsense_number\fP specifies the sense number of the word, within the -part of speech encoded in the \fIsynset_id\fP, in the WordNet +\fIsense_number\fR specifies the sense number of the word, within the +part of speech encoded in the \fIsynset_id\fR, in the WordNet database. -\fIword\fP is the ASCII text of the word as entered in the synset by +\fIword\fR is the ASCII text of the word as entered in the synset by the lexicographer. The text of the word is case sensitive. An adjective -\fIword\fP is immediately followed by a syntactic marker if one was +\fIword\fR is immediately followed by a syntactic marker if one was specified in the lexicographer file. -\fIsense_key\fP specifies the WordNet sense key for a given word sense. See +\fIsense_key\fR specifies the WordNet sense key for a given word sense. See .BR senseidx (5WN) for the specifications. -\fIsyntax\fP is the syntactic marker for a given adjective sense if one +\fIsyntax\fR is the syntactic marker for a given adjective sense if one was specified in the input files. See .BR wninput (5WN) for a list of the syntactic markers. Note that in the Prolog database, the parentheses are not included. -Each synset has a \fIgloss\fP that contains a definition and one or +Each synset has a \fIgloss\fR that contains a definition and one or more example sentences. -\fIclass_type\fP indicates whether the classification +\fIclass_type\fR indicates whether the classification relation represented is topical, usage, or regional, as indicated by -the \fIclass_type\fP of \fBt\fP, \fBu\fP, or \fBr\fP, respectively. +the \fIclass_type\fR of \fBt\fR, \fBu\fR, or \fBr\fR, respectively. -\fIf_num\fP specifies the generic sentence frame number for word -\fIw_num\fP in the synset indicated by \fIsynset_id\fP. Note that -when \fIw_num\fP is \fB0\fP, the frame number applies to all words in +\fIf_num\fR specifies the generic sentence frame number for word +\fIw_num\fR in the synset indicated by \fIsynset_id\fR. Note that +when \fIw_num\fR is \fB0\fR, the frame number applies to all words in the synset. If non-zero, the frame applies to that word in the synset. In WordNet, sense numbers are assigned as described in .BR wndb (5WN). -\fItag_count\fP is the number of times the sense was tagged in the -Semantic Concordances, and \fB0\fP if it was not instantiated. +\fItag_count\fR is the number of times the sense was tagged in the +Semantic Concordances, and \fB0\fR if it was not instantiated. .SH NOTES Since single forward quotes are used to enclose character strings, -single quote characters found in \fIword\fP and \fIgloss\fP fields are +single quote characters found in \fIword\fR and \fIgloss\fR fields are represented as two adjacent single quote characters. The load time can be greatly reduced by creating "object language" @@ -334,15 +355,15 @@ implementations, such as Quintus Prolog. .TP 20 .B WNHOME Base directory for WordNet. Default is -\fB/usr/local/WordNet-2.1\fP. +\fB/usr/local/WordNet-3.1\fR. .SH REGISTRY (WINDOWS) .TP 20 .B HKEY_LOCAL_MACHINE\eSOFTWARE\eWordNet\e2.1\eWNHome Base directory for WordNet. Default is -\fBC:\eProgram~Files\eWordNet\e2.1\fP. +\fBC:\eProgram~Files\eWordNet\e2.1\fR. .SH FILES -All files are in \fBWNHOME/prolog\fP on Unix platforms and -\fBWNHome\eprolog\fP on Windows platforms +All files are in \fBWNHOME/prolog\fR on Unix platforms and +\fBWNHome\eprolog\fR on Windows platforms .TP 20 .B wn_s.pl synset pointers diff --git a/doc/prologdb.5.pdf b/doc/prologdb.5.pdf deleted file mode 100644 index 7655bdc0c0c4caebe3871962348ac86d4e88fda7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12491 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 - - - - -PROLOGDB(5WN) manual page - - -Table of Contents

- -

NAME

-wn_pl - description of Prolog database files -

DESCRIPTION

-The files -wn_ * .pl contain the WordNet database in a prolog-readable format. A prolog -interface to WordNet is not implemented.

- The prolog database is very large -and may take many minutes to load into the Prolog workspace. A separate -file has been created for each WordNet relation giving the user the ability -to load only those parts of the database that they are interested.

- See -FILES , below, for a list of the database files and wndb(5WN) - and wninput(5WN) - -for detailed descriptions of the various WordNet relations (referred to -as operators in this manual page). -

File Format

-Each prolog database file -contains information corresponding to the synsets and word senses contained -in the WordNet database. In the prolog version of the database, the synset_id -s (defined below) are used as unique synset identifiers.

- Each line of -a file contains an operator that corresponds to a WordNet relation. All -lines with the same operator value are stored in the file wn_ operator -.pl .

- The general format of a line in a prolog database file is as follows: -

-

operator(field1,  ...  ,fieldn).
-
-

- Each line contains the name of the -operator, followed by a left parenthesis, a comma-separated list of fields, -a right parenthesis, and a period. Note there are no spaces, and each -line is terminated with a newline character. -

Operators

-Each WordNet relation -is represented in a separate file by operator name. Some operators are -reflexive (i.e. the "reverse" relation is implicit). So, for example, if -x is a hypernym of y , y is necessarily a hyponym of x . In the prolog -database, reflected pointers are usually implied for semantic relations. -

- Semantic relations are represented by a pair of synset_id s, in which -the first synset_id is generally the source of the relation and the second -is the target. If two pairs synset_id , w_num are present, the operator -represents a lexical relation between word forms.

- s(synset_id,w_num,'word',ss_type,sense_number,tag_count). -
-

A s operator is present for every word sense in WordNet. In wn_s.pl -, w_num specifies the word number for word in the synset.
-

- sk(synset_id,w_num,'sense_key'). -
-

A sk operator is present for every word sense in WordNet. This gives -the WordNet sense key for each word sense.
-

- g(synset_id,'gloss').
-

The g - operator specifies the gloss for a synset.
-

- syntax(synset_id,w_num,syntax). -
-

The syntax operator specifies the syntactic marker for a given word -sense if one is specified.
-

- hyp(synset_id,synset_id).
-

The hyp operator -specifies that the second synset is a hypernym of the first synset. This -relation holds for nouns and verbs. The reflexive operator, hyponym, implies -that the first synset is a hyponym of the second synset.
-

- ins(synset_id,synset_id). -
-

The ins operator specifies that the first synset is an instance of -the second synset. This relation holds for nouns. The reflexive operator, -has_instance, implies that the second synset is an instance of the first -synset.
-

- ent(synset_id,synset_id).
-

The ent operator specifies that the -second synset is an entailment of first synset. This relation only holds -for verbs.
-

- sim(synset_id,synset_id).
-

The sim operator specifies that -the second synset is similar in meaning to the first synset. This means -that the second synset is a satellite the first synset, which is the cluster -head. This relation only holds for adjective synsets contained in adjective -clusters.
-

- mm(synset_id,synset_id).
-

The mm operator specifies that the -second synset is a member meronym of the first synset. This relation only -holds for nouns. The reflexive operator, member holonym, can be implied. -
-

- ms(synset_id,synset_id).
-

The ms operator specifies that the second -synset is a substance meronym of the first synset. This relation only -holds for nouns. The reflexive operator, substance holonym, can be implied. -
-

- mp(synset_id,synset_id).
-

The mp operator specifies that the second -synset is a part meronym of the first synset. This relation only holds -for nouns. The reflexive operator, part holonym, can be implied.
-

- der(synset_id,synset_id). -
-

The der operator specifies that there exists a reflexive lexical morphosemantic -relation between the first and second synset terms representing derivational -morphology.
-

- cls(synset_id,w_num,synset_id,w_num,class_type).
-

The cls - operator specifies that the first synset has been classified as a member -of the class represented by the second synset. Either of the w_num's can -be 0, reflecting that the pointer is semantic in the original WordNet -database.
-

- cs(synset_id,synset_id).
-

The cs operator specifies that the -second synset is a cause of the first synset. This relation only holds -for verbs.
-

- vgp(synset_id,w_num,synset_id,w_num).
-

The vgp operator specifies -verb synsets that are similar in meaning and should be grouped together -when displayed in response to a grouped synset search.
-

- at(synset_id,synset_id). -
-

The at operator defines the attribute relation between noun and adjective -synset pairs in which the adjective is a value of the noun. For each pair, -both relations are listed (ie. each synset_id is both a source and target). -
-

- ant(synset_id,w_num,synset_id,w_num).
-

The ant operator specifies antonymous -word s. This is a lexical relation that holds for all syntactic categories. - For each antonymous pair, both relations are listed (ie. each synset_id,w_num - pair is both a source and target word.)
-

- sa(synset_id,w_num,synset_id,w_num). -
-

The sa operator specifies that additional information about the first -word can be obtained by seeing the second word. This operator is only -defined for verbs and adjectives. There is no reflexive relation (ie. it -cannot be inferred that the additional information about the second word -can be obtained from the first word).
-

- ppl(synset_id,w_num,synset_id,w_num). -
-

The ppl operator specifies that the adjective first word is a participle -of the verb second word. The reflexive operator can be implied.
-

- per(synset_id,w_num,synset_id,w_num). -
-

The per operator specifies two different relations based on the parts -of speech involved. If the first word is in an adjective synset, that -word pertains to either the noun or adjective second word. If the first -word is in an adverb synset, that word is derived from the adjective second -word.
-

- fr(synset_id,f_num,w_num).
-

The fr operator specifies a generic -sentence frame for one or all words in a synset. The operator is defined -only for verbs.
- -

Field Definitions

-A synset_id is a nine byte field in -which the first byte defines the syntactic category of the synset and -the remaining eight bytes are a synset_offset , as defined in wndb(5WN) -, -indicating the byte offset in the data. pos file that corresponds to the -syntactic category.

- The syntactic category is encoded as:

-

1    NOUN
- -2    VERB
- 3    ADJECTIVE
- 4    ADVERB
-
-

- w_num , if present, indicates which word -in the synset is being referred to. Word numbers are assigned to the word - fields in a synset, from left to right, beginning with 1. When used to -represent lexical WordNet relations w_num may be 0, indicating that the -relation holds for all words in the synset indicated by the preceding -synset_id . See wninput(5WN) - for a discussion of semantic and lexical -relations.

- ss_type is a one character code indicating the synset type: -

-

n    NOUN
- v    VERB
- a    ADJECTIVE
- s    ADJECTIVE SATELLITE
- r    ADVERB
-
-

- sense_number - specifies the sense number of the word, within the part of speech encoded -in the synset_id , in the WordNet database.

- word is the ASCII text of -the word as entered in the synset by the lexicographer. The text of the -word is case sensitive. An adjective word is immediately followed by -a syntactic marker if one was specified in the lexicographer file.

- sense_key - specifies the WordNet sense key for a given word sense. See senseidx(5WN) - -for the specifications.

- syntax is the syntactic marker for a given adjective -sense if one was specified in the input files. See wninput(5WN) - for a list -of the syntactic markers. Note that in the Prolog database, the parentheses -are not included.

- Each synset has a gloss that contains a definition -and one or more example sentences.

- class_type indicates whether the classification -relation represented is topical, usage, or regional, as indicated by the -class_type of t , u , or r , respectively.

- f_num specifies the generic -sentence frame number for word w_num in the synset indicated by synset_id -. Note that when w_num is 0 , the frame number applies to all words in -the synset. If non-zero, the frame applies to that word in the synset.

- -In WordNet, sense numbers are assigned as described in wndb(5WN) -. tag_count - is the number of times the sense was tagged in the Semantic Concordances, -and 0 if it was not instantiated. -

NOTES

-Since single forward quotes are -used to enclose character strings, single quote characters found in word - and gloss fields are represented as two adjacent single quote characters. -

- The load time can be greatly reduced by creating "object language" versions -of the files, an option that is supported by some implementations, such -as Quintus Prolog. -

ENVIRONMENT VARIABLES (UNIX)

- -
- -
WNHOME
-
Base directory -for WordNet. Default is /usr/local/WordNet-2.1 .
-
- -

REGISTRY (WINDOWS)

- -
- -
HKEY_LOCAL_MACHINE\SOFTWARE\WordNet\2.1\WNHome -
-
Base directory for WordNet. Default is C:\Program Files\WordNet\2.1 .
-
- -

FILES -

-All files are in WNHOME/prolog on Unix platforms and WNHome\prolog on -Windows platforms -
- -
wn_s.pl
-
synset pointers
- -
wn_sk.pl
-
sense keys
- -
wn_syntax.pl -
-
syntactic markers
- -
wn_g.pl
-
gloss pointers
- -
wn_hyp.pl
-
hypernym pointers -
- -
wn_ins.pl
-
instance pointers
- -
wn_ent.pl
-
entailment pointers
- -
wn_sim.pl
-
similar -pointers
- -
wn_mm.pl
-
member meronym pointers
- -
wn_ms.pl
-
substance meronym pointers -
- -
wn_mp.pl
-
part meronym pointers
- -
wn_der.pl
-
derivational morphology pointers -
- -
wn_cls.pl
-
class (domain) pointers
- -
wn_cs.pl
-
cause pointers
- -
wn_vgp.pl
-
grouped -verb pointers
- -
wn_at.pl
-
attribute pointers
- -
wn_ant.pl
-
antonym pointers
- -
wn_sa.pl -
-
see also pointers
- -
wn_ppl.pl
-
participle pointers
- -
wn_per.pl
-
pertainym -pointers
- -
wn_fr.pl
-
frame pointers
-
- -

SEE ALSO

-wndb(5WN) -, wninput(5WN) -, senseidx(5WN) -, -wngroups(7WN) -, wnpkgs(7WN) -.

- -


-Table of Contents

-

- + + + + + + + + + +PROLOGDB + + + + +

PROLOGDB

+ +NAME
+DESCRIPTION
+NOTES
+ENVIRONMENT VARIABLES (UNIX)
+REGISTRY (WINDOWS)
+FILES
+SEE ALSO
+ +
+ + +

NAME + +

+ + +

wn_pl - +description of Prolog database files

+ +

DESCRIPTION + +

+ + +

The files +wn_*.pl contain the WordNet database in +a prolog-readable format. A prolog interface to WordNet is +not implemented.

+ +

The prolog +database is very large and may take many minutes to load +into the Prolog workspace. A separate file has been created +for each WordNet relation giving the user the ability to +load only those parts of the database that they are +interested.

+ +

See +FILES, below, for a list of the database files and +wndb(5WN) and wninput(5WN) for detailed +descriptions of the various WordNet relations (referred to +as operators in this manual page).

+ +

File +Format
+Each prolog database file contains information corresponding +to the synsets and word senses contained in the WordNet +database. In the prolog version of the database, the +synset_ids (defined below) are used as unique synset +identifiers.

+ +

Each line of a +file contains an operator that corresponds to a WordNet +relation. All lines with the same operator value are +stored in the file wn_operator.pl.

+ +

The general +format of a line in a prolog database file is as +follows:

+ + +

operator(field1,  ...  ,fieldn).

+ +

Each line +contains the name of the operator, followed by a left +parenthesis, a comma-separated list of fields, a right +parenthesis, and a period. Note there are no spaces, and +each line is terminated with a newline character.

+ + +

Operators +
+Each WordNet relation is represented in a separate file by +operator name. Some operators are reflexive (i.e. the +"reverse" relation is implicit). So, for example, +if x is a hypernym of y, y is +necessarily a hyponym of x. In the prolog database, +reflected pointers are usually implied for semantic +relations.

+ +

Semantic +relations are represented by a pair of synset_ids, in +which the first synset_id is generally the source of +the relation and the second is the target. If two pairs +synset_id,w_num are present, the +operator represents a lexical relation between word +forms.

+ + +

s(synset_id,w_num,’word’,ss_type,sense_number,tag_count).

+ +

A s +operator is present for every word sense in WordNet. In +wn_s.pl, w_num specifies the word number for +word in the synset.

+ + +

sk(synset_id,w_num,’sense_key’).

+ +

A sk +operator is present for every word sense in WordNet. This +gives the WordNet sense key for each word sense.

+ + +

g(synset_id,’gloss’).

+ +

The g +operator specifies the gloss for a synset.

+ + +

syntax(synset_id,w_num,syntax).

+ +

The +syntax operator specifies the syntactic marker for a +given word sense if one is specified.

+ + +

hyp(synset_id,synset_id).

+ +

The hyp +operator specifies that the second synset is a hypernym of +the first synset. This relation holds for nouns and verbs. +The reflexive operator, hyponym, implies that the first +synset is a hyponym of the second synset.

+ + +

ins(synset_id,synset_id).

+ +

The ins +operator specifies that the first synset is an instance of +the second synset. This relation holds for nouns. The +reflexive operator, has_instance, implies that the second +synset is an instance of the first synset.

+ + +

ent(synset_id,synset_id).

+ +

The ent +operator specifies that the second synset is an entailment +of first synset. This relation only holds for verbs.

+ + +

sim(synset_id,synset_id).

+ +

The sim +operator specifies that the second synset is similar in +meaning to the first synset. This means that the second +synset is a satellite the first synset, which is the cluster +head. This relation only holds for adjective synsets +contained in adjective clusters.

+ + +

mm(synset_id,synset_id).

+ +

The mm +operator specifies that the second synset is a member +meronym of the first synset. This relation only holds for +nouns. The reflexive operator, member holonym, can be +implied.

+ + +

ms(synset_id,synset_id).

+ +

The ms +operator specifies that the second synset is a substance +meronym of the first synset. This relation only holds for +nouns. The reflexive operator, substance holonym, can be +implied.

+ + +

mp(synset_id,synset_id).

+ +

The mp +operator specifies that the second synset is a part meronym +of the first synset. This relation only holds for nouns. The +reflexive operator, part holonym, can be implied.

+ + +

der(synset_id,synset_id).

+ +

The der +operator specifies that there exists a reflexive lexical +morphosemantic relation between the first and second synset +terms representing derivational morphology.

+ + +

cls(synset_id,w_num,synset_id,w_num,class_type).

+ +

The cls +operator specifies that the first synset has been classified +as a member of the class represented by the second synset. +Either of the w_num’s can be 0, reflecting +that the pointer is semantic in the original WordNet +database.

+ + +

cs(synset_id,synset_id).

+ +

The cs +operator specifies that the second synset is a cause of the +first synset. This relation only holds for verbs.

+ + +

vgp(synset_id,w_num,synset_id,w_num).

+ +

The vgp +operator specifies verb synsets that are similar in meaning +and should be grouped together when displayed in response to +a grouped synset search.

+ + +

at(synset_id,synset_id).

+ +

The at +operator defines the attribute relation between noun and +adjective synset pairs in which the adjective is a value of +the noun. For each pair, both relations are listed (ie. each +synset_id is both a source and target).

+ + +

ant(synset_id,w_num,synset_id,w_num).

+ +

The ant +operator specifies antonymous words. This is a +lexical relation that holds for all syntactic categories. +For each antonymous pair, both relations are listed (ie. +each synset_id,w_num pair is both a source and target +word.)

+ + +

sa(synset_id,w_num,synset_id,w_num).

+ +

The sa +operator specifies that additional information about the +first word can be obtained by seeing the second word. This +operator is only defined for verbs and adjectives. There is +no reflexive relation (ie. it cannot be inferred that the +additional information about the second word can be obtained +from the first word).

+ + +

ppl(synset_id,w_num,synset_id,w_num).

+ +

The ppl +operator specifies that the adjective first word is a +participle of the verb second word. The reflexive operator +can be implied.

+ + +

per(synset_id,w_num,synset_id,w_num).

+ +

The per +operator specifies two different relations based on the +parts of speech involved. If the first word is in an +adjective synset, that word pertains to either the noun or +adjective second word. If the first word is in an adverb +synset, that word is derived from the adjective second +word.

+ + +

fr(synset_id,w_num,f_num).

+ +

The fr +operator specifies a generic sentence frame for one or all +words in a synset. The operator is defined only for +verbs.

+ +

Field +Definitions
+A synset_id is a nine byte field in which the first +byte defines the syntactic category of the synset and the +remaining eight bytes are a synset_offset, as defined +in wndb(5WN), indicating the byte offset in the +data.pos file that corresponds to the +syntactic category.

+ +

The syntactic +category is encoded as:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +

1

+ + +

NOUN

+ + +

2

+ + +

VERB

+ + +

3

+ + +

ADJECTIVE

+ + +

4

+ + +

ADVERB

+ +

w_num, +if present, indicates which word in the synset is being +referred to. Word numbers are assigned to the word +fields in a synset, from left to right, beginning with 1. +When used to represent lexical WordNet relations +w_num may be 0, indicating that the relation holds +for all words in the synset indicated by the preceding +synset_id. See wninput(5WN) for a discussion +of semantic and lexical relations.

+ +

ss_type +is a one character code indicating the synset type:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +

n

+ + +

NOUN

+ + +

v

+ + +

VERB

+ + +

a

+ + +

ADJECTIVE

+ + +

s

+ + +

ADJECTIVE SATELLITE

+ + +

r

+ + +

ADVERB

+ + +

sense_number +specifies the sense number of the word, within the part of +speech encoded in the synset_id, in the WordNet +database.

+ +

word is +the ASCII text of the word as entered in the synset by the +lexicographer. The text of the word is case sensitive. An +adjective word is immediately followed by a syntactic +marker if one was specified in the lexicographer file.

+ + +

sense_key +specifies the WordNet sense key for a given word sense. See +senseidx(5WN) for the specifications.

+ +

syntax +is the syntactic marker for a given adjective sense if one +was specified in the input files. See wninput(5WN) +for a list of the syntactic markers. Note that in the Prolog +database, the parentheses are not included.

+ +

Each synset has +a gloss that contains a definition and one or more +example sentences.

+ + +

class_type +indicates whether the classification relation represented is +topical, usage, or regional, as indicated by the +class_type of t, u, or r, +respectively.

+ +

f_num +specifies the generic sentence frame number for word +w_num in the synset indicated by synset_id. +Note that when w_num is 0, the frame number +applies to all words in the synset. If non-zero, the frame +applies to that word in the synset.

+ +

In WordNet, +sense numbers are assigned as described in wndb(5WN). +tag_count is the number of times the sense was tagged +in the Semantic Concordances, and 0 if it was not +instantiated.

+ +

NOTES + +

+ + +

Since single +forward quotes are used to enclose character strings, single +quote characters found in word and gloss +fields are represented as two adjacent single quote +characters.

+ +

The load time +can be greatly reduced by creating "object +language" versions of the files, an option that is +supported by some implementations, such as Quintus +Prolog.

+ +

ENVIRONMENT VARIABLES (UNIX) + +

+ + + + + + + + +
+ + +

WNHOME

+ + +

Base directory for WordNet. +Default is /usr/local/WordNet-3.1.

+ +

REGISTRY (WINDOWS) + +

+ + + +

HKEY_LOCAL_MACHINE\SOFTWARE\WordNet\2.1\WNHome

+ +

Base directory for WordNet. +Default is C:\Program Files\WordNet\2.1.

+ +

FILES + +

+ + +

All files are +in WNHOME/prolog on Unix platforms and +WNHome\prolog on Windows platforms

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +

wn_s.pl

+ + +

synset pointers

+
+ + +

wn_sk.pl

+ + +

sense keys

+
+ + +

wn_syntax.pl

+ + +

syntactic markers

+
+ + +

wn_g.pl

+ + +

gloss pointers

+
+ + +

wn_hyp.pl

+ + +

hypernym pointers

+
+ + +

wn_ins.pl

+ + +

instance pointers

+
+ + +

wn_ent.pl

+ + +

entailment pointers

+
+ + +

wn_sim.pl

+ + +

similar pointers

+
+ + +

wn_mm.pl

+ + +

member meronym pointers

+
+ + +

wn_ms.pl

+ + +

substance meronym pointers

+
+ + +

wn_mp.pl

+ + +

part meronym pointers

+
+ + +

wn_der.pl

+ + +

derivational morphology pointers

+
+ + +

wn_cls.pl

+ + +

class (domain) pointers

+
+ + +

wn_cs.pl

+ + +

cause pointers

+
+ + +

wn_vgp.pl

+ + +

grouped verb pointers

+
+ + +

wn_at.pl

+ + +

attribute pointers

+
+ + +

wn_ant.pl

+ + +

antonym pointers

+
+ + +

wn_sa.pl

+ + +

see also pointers

+
+ + +

wn_ppl.pl

+ + +

participle pointers

+
+ + +

wn_per.pl

+ + +

pertainym pointers

+
+ + +

wn_fr.pl

+ + +

frame pointers

+
+ +

SEE ALSO + +

+ + + +

wndb(5WN), +wninput(5WN), senseidx(5WN), +wngroups(7WN), wnpkgs(7WN).

+
+ + diff --git a/doc/prologdb.pdf b/doc/prologdb.pdf new file mode 100644 index 0000000000000000000000000000000000000000..2cf59fae9bf102f811a8a3948e60a17e512e3155 GIT binary patch literal 28331 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 -> outdups(N,P); ok). check_duplicates:- - consult('pred_format.pl'), allwn(LR), member(P,LR), pred2arity(P,A,L),