Phrase layers
3.1 Introduction
This chapter considers phrase layers. These are intermediate levels of organisation between a word and the clause. Each phrase is made up of a HEAD word and any DEPENDENTs. The head word is the word that the phrase is required to have in order to exist and may be the only element of the phrase. A phrase is named after the word class of the head word. There are four phrase types:
- noun phrases — with a noun head word (section 3.2)
- adverb phrases — with an adverb head word (section 3.3)
- adjective phrases — with an adjective head word (section 3.4)
- preposition phrases — with a preposition head word (section 3.5)
3.2 Noun phrases
This section considers noun phrases. A noun phrase is created with noun_phrase of (3.1) which calls noun_phrase_top to create list content NL of daughter elements for a node structure with its Label consisting of 'NP' together with any extension from the Ext parameter. A contentful Ext gives role/function/indexing information for the noun phrase. The assembled structure is added to the content collected from outside the noun phrase with list L.
- (3.1)
-
noun_phrase(Ext,Type,[node(Label,NL)|L],L) -->
noun_phrase_top(Type,NL,[]),
{
atom_concat('NP',Ext,Label)
}.
Additional to the Ext parameter, there is a Type parameter whose value is passed on to the noun_phrase_top call. This type information has to come from the containing noun phrase and will determine noun phrase use as reflected by distribution. Possible values are:
- general
- non_interrogative
- interrogative
- relative
This type information is passed on to:
- head nouns that can't be modified (see section 2.2)
- determiners (see section 2.3)
- genitive pronouns (see section 2.4)
A call of the noun_phrase_top rule (3.2) concerns gathering content from either:
- [rule 1] a call of noun_head_full (from section 2.2) which will identify a word that essentially contributes a full noun phrase by itself
- [rule 2] a call of noun_phrase_initial_layer (from section 3.2.1 below)
- (3.2)
-
noun_phrase_top(Type,L,L0) -->
noun_head_full(Type,L,L0).
noun_phrase_top(Type,L,L0) -->
noun_phrase_initial_layer(Type,L,L0).
Query (3.3) asks if w('PRO','him') provides content to project structure for a noun phrase.
- (3.3)
-
| ?- tphrase_set_string([w('PRO','him')]), parse(noun_phrase('',general)).
(NP (PRO him))
yes
The affirmative response and tree output of (3.3) is achieved by following the call structure of (3.4).
- (3.4)
-
noun_phrase general
|
noun_phrase_top general
|
noun_head_full general
|
[w('PRO','him')]
|
|
|
Note how the noun phrase type information from the call of (3.4) (general) is passed down the call structure to determine what can be an appropriate word for the noun phrase. In contrast to (3.3), query (3.5) fails: the noun phrase call provides general type information, but the word list contains a word with RPRO word class (a relative pronoun) requiring relative type information.
- (3.5)
-
| ?- tphrase_set_string([w('RPRO','who')]), parse(noun_phrase('',general)).
no
3.2.1 Initial noun phrase layers
With (3.3), we have seen the simplest form for a noun phrase, which involves a single word that contributes content for noun_head_full. This section delves slightly deeper into possible noun phrase structure by considering what a noun_phrase_initial_layer call of (3.6) may return.
Among other things, a noun_phrase_initial_layer call opens the possibility of having coordinate structures at the top level of the noun phrase. With (3.6), there are two ways to achieve this highest level of noun phrase coordination:
- [rule 5] with structure involving an initial conjunct word followed by a first conjunct noun phrase followed by another conjunct word followed by a second conjunct noun phrase
- [rule 6] with a call of noun_phrase that introduces the first noun phrase conjunct along with a subsequent call to noun_phrase_initial_tail of (3.7) that begins a recursive accumulation of further conjuncts
- (3.6)
-
noun_phrase_initial_layer(Type,L,L0) -->
determiner_layer(Type,L,L1),
internal_np_higher_layer(L1,L0).
noun_phrase_initial_layer(Type,L,L0) -->
{
member(Type,[interrogative,general])
},
adjective_phrase('',interrogative,L,L1),
internal_np_higher_layer(L1,L0).
noun_phrase_initial_layer(Type,L,L0) -->
{
member(Type,[non_interrogative,general])
},
noun_head(L,L0).
noun_phrase_initial_layer(Type,L,L0) -->
{
member(Type,[non_interrogative,general])
},
internal_np_higher_layer(L,L0).
noun_phrase_initial_layer(Type,[node('NLYR',[CONJ1,NP1,node('CONJP',[CONJ2,NP2])])|L],L) -->
conj(CONJ1),
noun_phrase('',Type,[NP1],[]),
conj(CONJ2),
noun_phrase('',Type,[NP2],[]).
noun_phrase_initial_layer(Type,[node('NLYR',[NP|CL])|L],L) -->
noun_phrase('',Type,[NP],[]),
noun_phrase_initial_tail(Type,CL,[]).
noun_phrase_initial_layer(Type,L,L0) -->
noun_phrase_initial_layer(Type,L,L1),
preposition_phrase('',general,L1,L0).
noun_phrase_initial_layer(Type,L,L0) -->
{
Type == relative
},
noun_phrase_initial_layer(general,L,L1),
preposition_phrase('',relative,L1,L0).
noun_phrase_initial_layer(Type,L,L0) -->
noun_phrase_initial_layer(Type,L,L1),
relative_clause(L1,L0).
- (3.7)
-
noun_phrase_initial_tail(Type,[node('CONJP',[CONJ,NP])|L],L) -->
conj(CONJ),
noun_phrase('',Type,[NP],[]).
noun_phrase_initial_tail(Type,[PU,node('CONJP',[NP])|L],L0) -->
punc(non_final,[PU],[]),
noun_phrase('',Type,[NP],[]),
noun_phrase_initial_tail(Type,L,L0).
Parsing of a noun phrase with a top level coordination is illustrated with (3.8), which leads to output of a noun phrase that immediately contains an NLYR (nominal intermediate level) phrasal projection as its only daughter element. The NLYR itself is comprised of three conjuncts, each of which contains an element with full noun phrase structure.
- (3.8)
-
| ?- tphrase_set_string([w('PRO','you'), w('PUNC',','), w('PRO','he'), w('CONJ','and'), w('PRO','I')]), parse(noun_phrase('-SBJ',non_interrogative)).
(NP-SBJ (NLYR (NP (PRO you))
(PUNC ,)
(CONJP (NP (PRO he)))
(CONJP (CONJ and)
(NP (PRO I)))))
yes
Calls to reach the output of (3.8) follow (3.9). After the initial noun_phrase call, there are three further calls to noun_phrase, each for one of the three conjuncts. Also note how the coordination arises from the creation of a sequence of calls to noun_phrase_initial_tail of (3.7). This gives a call structure that branches to the right, while leading to the return of conjuncts that are all placed under the same NLYR of the output tree structure of (3.8).
- (3.9)
-
noun_phrase -SBJ non_interrogative
|
noun_phrase_top non_interrogative
|
noun_phrase_initial_layer non_interrogative
|
noun_phrase non_interrogative
|
noun_phrase_top non_interrogative
|
noun_head_full non_interrogative
|
[w('PRO','you')]
|
|
|
|
noun_phrase_initial_tail non_interrogative
|
punc non_final
|
[w('PUNC',',')]
|
|
noun_phrase non_interrogative
|
noun_phrase_top non_interrogative
|
noun_head_full non_interrogative
|
[w('PRO','he')]
|
|
|
|
noun_phrase_initial_tail non_interrogative
|
|
noun_phrase non_interrogative
|
noun_phrase_top non_interrogative
|
noun_head_full non_interrogative
|
[w('PRO','I')]
|
|
|
|
|
|
|
|
The recursion seen with the call structure of (3.9) when parsing conjunction is not the only opportunity for recursion created by calling noun_phrase_initial_layer of (3.6). Calls can also be recursive so that the parse is able to pick up on the left edge of the noun phrase modifiers that are either preposition phrases (discussed in section 3.5) or relative clauses (discussed in section 6.8).
Question:
[This question is based on an exercise from Borsley (1996, p. 23).] There are three parse results for the parse list of (3.10), one for (3.12), and none for (3.11) and (3.13). Do these results and failures match your expectations? Why do they arise?
- (3.10)
-
| ?- tphrase_set_string([w('CONJ','both'), w('PRO','you'), w('CONJ','and'), w('PRO','he'), w('CONJ','and'), w('PRO','I')]), parse(noun_phrase('-SBJ',non_interrogative)).
(NP-SBJ (NLYR (NP (NLYR (CONJ both)
(NP (PRO you))
(CONJP (CONJ and)
(NP (PRO he)))))
(CONJP (CONJ and)
(NP (PRO I)))))
(NP-SBJ (NLYR (CONJ both)
(NP (PRO you))
(CONJP (CONJ and)
(NP (NLYR (NP (PRO he))
(CONJP (CONJ and)
(NP (PRO I))))))))
(NP-SBJ (NLYR (CONJ both)
(NP (NLYR (NP (PRO you))
(CONJP (CONJ and)
(NP (PRO he)))))
(CONJP (CONJ and)
(NP (PRO I)))))
yes
- (3.11)
-
| ?- tphrase_set_string([w('CONJ','both'), w('PRO','you'), w('PUNC',','), w('PRO','he'), w('CONJ','and'), w('PRO','I')]), parse(noun_phrase('-SBJ',non_interrogative)).
no
- (3.12)
-
| ?- tphrase_set_string([w('PRO','you'), w('CONJ','and'), w('CONJ','both'), w('PRO','he'), w('CONJ','and'), w('PRO','I')]), parse(noun_phrase('-SBJ',non_interrogative)).
(NP-SBJ (NLYR (NP (PRO you))
(CONJP (CONJ and)
(NP (NLYR (CONJ both)
(NP (PRO he))
(CONJP (CONJ and)
(NP (PRO I))))))))
yes
- (3.13)
-
| ?- tphrase_set_string([w('PRO','you'), w('PUNC',','), w('CONJ','both'), w('PRO','he'), w('CONJ','and'), w('PRO','I')]), parse(noun_phrase('-SBJ',non_interrogative)).
no
3.2.2 Internal noun phrase layers
In addition to allowing at the highest levels of noun phrase structure for recursive calls that establish coordination or add post-head modifiers, a call to noun_phrase_initial_layer of (3.6) can also be preparation for delving deeper into noun phase structure, in particular, by allowing for subsequent calls to the internal_np_higher_layer rules of (3.14) that lead through to calls of the internal_np_lower_layer rules of (3.16).
Recursion with internal_np_higher_layer rules of (3.14) allows for:
- [rule 1] adjective phrases with general type information as pre-head modifiers
- [rule 2] single word present participle (-ing) clauses as pre-head modifiers
- [rule 3] single word passive participle (-ed/-en) clauses as pre-head modifiers
- [rule 5] preposition phrases as post-head modifiers
- [rule 6] relative clauses as post-head modifiers
- [rule 7] the integration of coordination
- (3.14)
-
internal_np_higher_layer(L,L0) -->
adjective_phrase('',general,L,L1),
internal_np_higher_layer(L1,L0).
internal_np_higher_layer([node('IP-PPL',[node('VAG;~I',[node(Word,[])])])|L],L0) -->
[w('VAG',';~I',Word)],
internal_np_higher_layer(L,L0).
internal_np_higher_layer([node('IP-PPL',[node('NP-LGS',[node('*',[])]),node('VVN;~Tn',[node(Word,[])])])|L],L0) -->
[w('VVN',';~Tn',Word)],
internal_np_higher_layer(L,L0).
internal_np_higher_layer(L,L0) -->
internal_np_lower_layer(L,L0).
internal_np_higher_layer(L,L0) -->
internal_np_higher_layer(L,L1),
preposition_phrase('',general,L1,L0).
internal_np_higher_layer(L,L0) -->
internal_np_higher_layer(L,L1),
relative_clause(L1,L0).
internal_np_higher_layer([node('NLYR',[node('NP',NL)|CL])|L],L) -->
internal_np_higher_layer(NL,[]),
internal_np_higher_tail(CL,[]).
For coordinations of internal_np_higher_layer structure, conjuncts subsequent to the first are accumulated with internal_np_higher_tail of (3.15).
- (3.15)
-
internal_np_higher_tail([node('CONJP',[CONJ,node('NP',NL)])|L],L) -->
conj(CONJ),
internal_np_higher_layer(NL,[]).
internal_np_higher_tail([PU,node('CONJP',[node('NP',NL)])|L],L0) -->
punc(non_final,[PU],[]),
internal_np_higher_layer(NL,[]),
internal_np_higher_tail(L,L0).
Recursion is also possible with the internal_np_lower_layer rules of (3.16) to integrate:
- [rule 2] a noun that is a noun modifier
- [rule 3] content for an internal_np_higher_layer that is a noun modifier
- [rule 4] content for conjoined internal_np_higher_layer structure that is a noun modifier
- [rule 8] coordinations of internal_np_lower_layer structure
The non-recursive calls of internal_np_lower_tail all involve finding a noun that will be the head noun, either:
- [rule 1] without a complement
- [rules 5–7] with a complement
A complement can be either:
- [rule 5] a to-infinitive clause found with ip_to_inf of section 6.4.2
- [rule 6] a finite that-clause with an overt instance of the complementiser word that found with cp_that of section 6.2 called with its type parameter set to with_c
- [rule 7] an embedded question clause found with cp_embedded_que of section 6.3
- (3.16)
-
internal_np_lower_layer(L,L0) -->
noun(L,L0).
internal_np_lower_layer(L,L0) -->
noun(L,L1),
internal_np_lower_layer(L1,L0).
internal_np_lower_layer([node('NLYR',[NL1,NL2|NL3])|L],L0) -->
internal_np_higher_layer([NL1,NL2|NL3],[]),
internal_np_lower_layer(L,L0).
internal_np_lower_layer([node('NLYR',[node('NLYR',[node('NP',NL)|CL])])|L],L0) -->
internal_np_higher_layer(NL,[]),
internal_np_higher_tail(CL,[]),
internal_np_lower_layer(L,L0).
internal_np_lower_layer(L,L0) -->
noun(L,L1),
ip_to_inf('',[],L1,L0).
internal_np_lower_layer(L,L0) -->
noun(L,L1),
cp_that('',with_c,[],L1,L0).
internal_np_lower_layer(L,L0) -->
noun(L,L1),
cp_embedded_que('',[],L1,L0).
internal_np_lower_layer([node('NLYR',[node('NP',NL)|CL])|L],L) -->
internal_np_lower_layer(NL,[]),
internal_np_lower_tail(CL,[]).
For coordinations of internal_np_lower_layer structure, conjuncts subsequent to the first are accumulated with internal_np_lower_tail of (3.17).
- (3.17)
-
internal_np_lower_tail([node('CONJP',[CONJ,node('NP',NL)])|L],L) -->
conj(CONJ),
internal_np_lower_layer(NL,[]).
internal_np_lower_tail([PU,node('CONJP',[node('NP',NL)])|L],L0) -->
punc(non_final,[PU],[]),
internal_np_lower_layer(NL,[]),
internal_np_lower_tail(L,L0).
In (3.18) we can see a demonstration of how a word list containing only a single common noun word gives content for the creation of a resulting noun phrase.
- (3.18)
-
| ?- tphrase_set_string([w('NS','boys')]), parse(noun_phrase('',general)).
(NP (NS boys))
yes
Calls to reach the output of (3.18) follow (3.19), amounting to the full range of internal noun phrase structure needing to have been accessed before the head noun call is reached.
- (3.19)
-
noun_phrase general
|
noun_phrase_top general
|
noun_phrase_initial_layer general
|
|
|
|
3.2.3 Determiner layer
The internal structuring revealed by (3.19) allows for more elements to be placed around the noun phrase head word. Notably, a call to noun_phrase_initial_layer of (3.6) allows for placement of a determiner layer before the noun phrase head word. A determiner layer is created with the determiner_layer rules of (3.20) which are sensitive to the type information carried by the calling noun phrase.
- (3.20)
-
determiner_layer(Type,L,L0) -->
det(Type,L,L0).
determiner_layer(Type,[node('NP-GENV',NL)|L],L) -->
noun_phrase_genm_layer(Type,NL,[]).
The word list of (3.21) contains a determiner word, followed by a common noun word that can serve as a noun phrase head, followed by a coordination word, and ending with a second common noun word that can also serve as a noun phrase head. As (3.21) shows, this leads to coordination, with each common noun word occupying its own conjunct internal to the noun phrase structure. What is still more interesting is the location of the determiner word, because the results reveal two alternative placements.
- (3.21)
-
| ?- tphrase_set_string([w('D','a'), w('N','knife'), w('CONJ','and'), w('N','fork')]), parse(noun_phrase('',general)).
(NP (NLYR (NP (D a)
(N knife))
(CONJP (CONJ and)
(NP (N fork)))))
(NP (D a)
(NLYR (NP (N knife))
(CONJP (CONJ and)
(NP (N fork)))))
yes
We can see why these two different placements for the determiner arise by considering the call structures involved in creating the results. The first result of (3.21) is created with the calls of (3.22). This shows a call to noun_phrase_initial_layer being responsible for the integration of the determiner from within the first conjunct. The first conjunct is itself introduced by an earlier call of noun_phrase_initial_layer that also calls noun_phrase_initial_tail.
- (3.22)
-
noun_phrase general
|
noun_phrase_top general
|
noun_phrase_initial_layer general
|
noun_phrase general
|
noun_phrase_top general
|
noun_phrase_initial_layer general
|
|
|
|
|
|
noun_phrase_initial_tail general
|
|
noun_phrase general
|
noun_phrase_top general
|
noun_phrase_initial_layer general
|
|
|
|
|
|
|
|
In contrast, the second result of (3.21) is created with the calls of (3.23). This shows a call to noun_phrase_initial_layer being responsible for the integration of the determiner from outside both conjuncts, with both conjuncts being introduced by a call of internal_np_lower_layer.
- (3.23)
-
noun_phrase general
|
noun_phrase_top general
|
noun_phrase_initial_layer general
|
|
|
|
|
Now consider (3.24), with its word list that contains a second determiner word that follows the conjunct word. The result shows only one resulting structure.
- (3.24)
-
| ?- tphrase_set_string([w('D','a'), w('N','knife'), w('CONJ','and'), w('D','a'), w('N','fork')]), parse(noun_phrase('',general)).
(NP (NLYR (NP (D a)
(N knife))
(CONJP (CONJ and)
(NP (D a)
(N fork)))))
yes
Calls to reach the single output of (3.24) follow (3.25). Notably, the conjuncts are introduced by calls of noun_phrase_initial_layer and noun_phrase_initial_tail, as was the case with (3.22). This results in structure for the second conjunct that is sufficiently high in the hierarchy of noun phrase structure to allow for determiner integration with a noun_phrase_initial_layer call.
- (3.25)
-
noun_phrase general
|
noun_phrase_top general
|
noun_phrase_initial_layer general
|
noun_phrase general
|
noun_phrase_top general
|
noun_phrase_initial_layer general
|
|
|
|
|
|
noun_phrase_initial_tail general
|
|
noun_phrase general
|
noun_phrase_top general
|
noun_phrase_initial_layer general
|
|
|
|
|
|
|
|
|
If the query of (3.24) had instead followed the call structure of (3.23), then internal_np_higher_layer calls would be reached from where there is no way to integrate the determiner for the second conjunct.
3.2.4 Genitive noun phrase layers
The second determiner_layer rule of (3.20) leads to calling the noun_phrase_genm_layer rules of (3.26) to establish structure for a distinct internal noun phrase with genitive case role. The non-recursive rules of noun_phrase_genm_layer involves either:
- picking up a genitive pronoun with pronoun_genm (from section 2.4)
- finding content for a noun phrase followed by a genitive marker, identified with genm of (from section 2.4)
- (3.26)
-
noun_phrase_genm_layer(Type,L,L0) -->
pronoun_genm(Type,L,L0).
noun_phrase_genm_layer(Type,L,L0) -->
noun_phrase_initial_layer(Type,L,L1),
genm(L1,L0).
noun_phrase_genm_layer(Type,[node('NLYR',[node('NP',NL)|CL])|L],L) -->
noun_phrase_genm_layer(Type,NL,[]),
noun_phrase_genm_tail(Type,CL,[]).
Note that conjunction is possible at the top level of genitive noun phrase structure. This is captured by determiner_layer having a recursive rule for picking up conjuncts, with non-initial conjuncts gathered by calls to noun_phrase_genm_tail of (3.27).
- (3.27)
-
noun_phrase_genm_tail(Type,[node('CONJP',[CONJ,node('NP',NL)])|L],L) -->
conj(CONJ),
noun_phrase_genm_layer(Type,NL,[]).
noun_phrase_genm_tail(Type,[PU,node('CONJP',[node('NP',NL)])|L],L0) -->
punc(non_final,[PU],[]),
noun_phrase_genm_layer(Type,NL,[]),
noun_phrase_genm_tail(Type,L,L0).
Consider (3.28), with its word list that contains two proper noun words, followed by a genitive marker, followed by two common noun words.
- (3.28)
-
| ?- tphrase_set_string([w('D;_nphd_','someone'), w('GENM','<apos>s'), w('N','cash'), w('N','offer')]), parse(noun_phrase('',general)).
(NP (NP-GENV (D;_nphd_ someone)
(GENM <apos>s))
(N cash)
(N offer))
yes
Calls to reach the output of (3.28) follow (3.29).
- (3.29)
-
noun_phrase general
|
noun_phrase_initial_layer general
|
determiner_layer general
|
noun_phrase_genm_layer general
|
noun_phrase_initial_layer general
|
noun_head
|
[w('D;_nphd_','someone')]
|
|
|
genm
|
[w('GENM','<apos>s')]
|
|
|
|
|
|
3.3 Adverb phrases
An adverb phrase is created with (3.30), which calls adverb_phrase_layer of (3.31) to create list content (AL) to place under an ADVP labelled structure, possibly with a label extension as role/function/indexing information. There is an Ext parameter to provide any tag label extension, and a Type parameter for type information:
- general
- interrogative
- relative
- (3.30)
-
adverb_phrase(Ext,Type,[node(Label,AL)|L],L) -->
adverb_phrase_layer(Type,AL,[]),
{
atom_concat('ADVP',Ext,Label)
}.
The non-recursive rules of (3.31) [rules 1 and 2] establish the head word as a word found with calls of adv (see section 2.6). Rule 2 of (3.31) brings the additional need for word list content that will support a call of ip_to_inf (see section 5.4.2) with parameters stating:
- no function information ('')
- no inheritance of displaced content ([])
Calls to adverb_phrase_layer of (3.31) can also be recursive, allowing the parse to either:
- [rule 3] pick up pre-head modifier noun phrases
- [rule 4] pick up pre-head modifier adverb phrases
- [rule 5] pick up post-head modifier preposition phrases
- [rule 6] start a conjunction structure where all conjuncts are added with adverb_phrase with non-initial conjuncts gathered by calls to adverb_phrase_tail of (3.32)
- (3.31)
-
adverb_phrase_layer(Type,L,L0) -->
adv(Type,L,L0).
adverb_phrase_layer(general,L,L0) -->
adv(catenative,L,L1),
ip_to_inf('',[],L1,L0).
adverb_phrase_layer(general,L,L0) -->
noun_phrase('',general,L,L1),
adverb_phrase_layer(general,L1,L0).
adverb_phrase_layer(general,L,L0) -->
neg(L,L1),
adverb_phrase_layer(general,L1,L0).
adverb_phrase_layer(Type,L,L0) -->
adverb_phrase('',Type,L,L1),
adverb_phrase_layer(general,L1,L0).
adverb_phrase_layer(general,L,L0) -->
adverb_phrase_layer(general,L,L1),
preposition_phrase('',general,L1,L0).
adverb_phrase_layer(Type,[node('AVLYR',[ADVP|CL])|L],L) -->
adverb_phrase('',Type,[ADVP],[]),
adverb_phrase_tail(Type,CL,[]).
- (3.32)
-
adverb_phrase_tail(Type,[node('CONJP',[CONJ,ADVP])|L],L) -->
conj(CONJ),
adverb_phrase('',Type,[ADVP],[]).
adverb_phrase_tail(Type,[PU,node('CONJP',[ADVP])|L],L0) -->
punc(non_final,[PU],[]),
adverb_phrase('',Type,[ADVP],[]),
adverb_phrase_tail(Type,L,L0).
3.4 Adjective phrases
An adjective phrase is created with (3.33) which calls adjective_phrase_layer of (3.34) to create list content (AL) to place under an ADJP labelled structure, possibly with a label extension as role/function/indexing information. There is an Ext parameter to provide any tag label extension, and a Type parameter for type information:
- general
- interrogative
- relative
- (3.33)
-
adjective_phrase(Ext,Type,[node(Label,AL)|L],L) -->
adjective_phrase_layer(Type,AL,[]),
{
atom_concat('ADJP',Ext,Label)
}.
The non-recursive rules of (3.34) [rules 1–3] establish the head word as a word found with calls of adj (see section 2.7). Rule 2 of (3.34) brings the additional need for word list content that will support a call of ip_to_inf (see section 5.4.2) with parameters stating:
- no function information ('')
- no inheritance of displaced content ([])
Rule 3 of (3.34) brings the additional need for word list content that will support a call of cp_that called with its type parameter set to with_c (see section 5.4.2).
Calls to adjective_phrase_layer of (3.34) can also be recursive, allowing the parse to either:
- [rule 4] pick up pre-head modifier noun phrases
- [rule 5] pick up pre-head negation
- [rule 6] pick up pre-head modifier adverb phrases
- [rule 7] pick up post-head modifier preposition phrases
- [rule 8] start a conjunction structure where all conjuncts are added with adjective_phrase with non-initial conjuncts gathered by calls to adjective_phrase_tail of (3.35)
- (3.34)
-
adjective_phrase_layer(general,L,L0) -->
adj(general,L,L0).
adjective_phrase_layer(general,L,L0) -->
adj(catenative,L,L1),
ip_to_inf('',[],L1,L0).
adjective_phrase_layer(general,L,L0) -->
adj(general,L,L1),
cp_that('',with_c,[],L1,L0).
adjective_phrase_layer(general,L,L0) -->
noun_phrase('',general,L,L1),
adjective_phrase_layer(general,L1,L0).
adjective_phrase_layer(general,L,L0) -->
neg(L,L1),
adjective_phrase_layer(general,L1,L0).
adjective_phrase_layer(Type,L,L0) -->
adverb_phrase('',Type,L,L1),
adjective_phrase_layer(general,L1,L0).
adjective_phrase_layer(general,L,L0) -->
adjective_phrase_layer(general,L,L1),
preposition_phrase('',general,L1,L0).
adjective_phrase_layer(Type,[node('AJLYR',[ADJP|CL])|L],L) -->
adjective_phrase('',Type,[ADJP],[]),
adjective_phrase_tail(Type,CL,[]).
- (3.35)
-
adjective_phrase_tail(Type,[node('CONJP',[CONJ,ADJP])|L],L) -->
conj(CONJ),
adjective_phrase('',Type,[ADJP],[]).
adjective_phrase_tail(Type,[PU,node('CONJP',[ADJP])|L],L0) -->
punc(non_final,[PU],[]),
adjective_phrase('',Type,[ADJP],[]),
adjective_phrase_tail(Type,L,L0).
As an example with adjective phrases, consider (3.36). The word list gives overall content for a noun phrase, while containing two adjective word instances: w('ADJ','important') and w('ADJ','difficult'). Each adjective word will require its own adjective phrase projection, which is seen in the result of (3.36) with its two adjective phrase structures, the first of which has an adverb structure as an internal modifier projected by the adverb word w('ADV','especially').
- (3.36)
-
| ?- tphrase_set_string([w('D','one'), w('ADV','especially'), w('ADJ','important'), w('ADJ','difficult'), w('N','area')]), parse(noun_phrase('',general)).
(NP (D one)
(ADJP (ADVP (ADV especially))
(ADJ important))
(ADJP (ADJ difficult))
(N area))
yes
We can see how the calculation of (3.36) will have worked with the call structure of (3.37).
- (3.37)
-
noun_phrase general
|
noun_phrase_top general
|
noun_phrase_initial_layer general
|
determiner_layer general
|
det general
|
[w('D','one')]
|
|
|
internal_np_higher_layer
|
adjective_phrase general
|
adjective_phrase_layer general
|
adverb_phrase general
|
adverb_phrase_layer general
|
adv general
|
[w('ADV','especially')]
|
|
|
|
adjective_phrase_layer general
|
adj general
|
[w('ADJ','important')]
|
|
|
|
|
internal_np_higher_layer
|
adjective_phrase general
|
adjective_phrase_layer general
|
adj general
|
[w('ADJ','difficult')]
|
|
|
|
|
|
|
|
|
3.5 Preposition phrases
A preposition phrase can be created with (3.38) by calling preposition_phrase_layer of (3.39) to create list content (PL) to place under a PP labelled structure, possibly with a label extension as role/function/indexing information. There is an Ext parameter to provide any tag label extension, and a Type parameter for type information:
- general
- interrogative
- relative
- (3.38)
-
preposition_phrase(Ext,Type,L,L0) -->
preposition_phrase_layer(Type,PL,[]),
{
atom_concat('PP',Ext,Label),
L = [node(Label,PL)|L0]
}.
preposition_phrase(Ext,Type,L,L0) -->
preposition_phrase('',Type,[PP1],[]),
preposition_phrase_tail(Type,CL,[]),
{
atom_concat('PP',Ext,Label),
L = [node(Label,[PP1|CL])|L0]
}.
There is only one preposition_phrase_layer rule in (3.39), requiring a word list that has an initial preposition word found with role (from section 2.11). The initial preposition word needs to then be followed by content for:
- [rule 1] a noun phrase
- [rule 2] an adverb phrase
- [rule 3] a participle clause with control inheritance
- [rule 4] a participle clause with an unfilled subject
- [rule 5] an embedded question
- (3.39)
-
preposition_phrase_layer(Type,L,L0) -->
role(L,L1),
noun_phrase('',Type,L1,L0).
preposition_phrase_layer(general,L,L0) -->
role(L,L1),
adverb_phrase('',general,L1,L0).
preposition_phrase_layer(general,L,L0) -->
role(L,[node('IP-PPL2;IP-PPL',IL)|L0]),
ip_ppl_adverbial_layer(filled_subject,IL,[]).
preposition_phrase_layer(general,L,L0) -->
role(L,[node('IP-PPL3',IL)|L0]),
ip_ppl_adverbial_layer(unfilled_subject,IL,[]).
preposition_phrase_layer(general,L,L0) -->
role(L,L1),
cp_embedded_que('',[],L1,L0).
preposition_phrase_layer(general,L,L0) -->
role(L,[node('IP-ADV',IL)|L0]),
clause_top_layer(statement_order,[],IL,[]).
Conjunction is also possible at the top level of preposition phrase structure. This is captured by preposition_phrase of (3.38) having a recursive rule for picking up conjuncts, with non-initial conjuncts gathered by calls to preposition_phrase_tail of (3.40).
- (3.40)
-
preposition_phrase_tail(Type,[node('CONJP',[CONJ,PP])|L],L) -->
conj(CONJ),
preposition_phrase('',Type,[PP],[]).
preposition_phrase_tail(Type,[PU,node('CONJP',[PP])|L],L0) -->
punc(non_final,[PU],[]),
preposition_phrase('',Type,[PP],[]),
preposition_phrase_tail(Type,L,L0).
As an example with preposition phrases, consider (3.41). The word list gives overall content for a noun phrase, while containing three preposition word instances: w('P-ROLE','of'), w('P-ROLE','from'), and another w('P-ROLE','of'). Each preposition word will introduce a preposition phrase, so we should expect parse results with three contained preposition phrases.
- (3.41)
-
| ?- tphrase_set_string([w('D','the'), w('N','ascent'), w('P-ROLE','of'), w('D','a'), w('ADJ','human'), w('N','figure'), w('P-ROLE','from'), w('D','the'), w('N','direction'), w('P-ROLE','of'), w('D','the'), w('ADJ','distant'), w('N','town')]), parse(noun_phrase('',general)).
(NP (D the)
(N ascent)
(PP (P-ROLE of)
(NP (D a)
(ADJP (ADJ human))
(N figure)
(PP (P-ROLE from)
(NP (D the)
(N direction)
(PP (P-ROLE of)
(NP (D the)
(ADJP (ADJ distant))
(N town))))))))
(NP (D the)
(N ascent)
(PP (P-ROLE of)
(NP (D a)
(ADJP (ADJ human))
(N figure)
(PP (P-ROLE from)
(NP (D the)
(N direction)))
(PP (P-ROLE of)
(NP (D the)
(ADJP (ADJ distant))
(N town))))))
(NP (D the)
(N ascent)
(PP (P-ROLE of)
(NP (D a)
(ADJP (ADJ human))
(N figure)))
(PP (P-ROLE from)
(NP (D the)
(N direction)
(PP (P-ROLE of)
(NP (D the)
(ADJP (ADJ distant))
(N town))))))
(NP (D the)
(N ascent)
(PP (P-ROLE of)
(NP (D a)
(ADJP (ADJ human))
(N figure)
(PP (P-ROLE from)
(NP (D the)
(N direction)))))
(PP (P-ROLE of)
(NP (D the)
(ADJP (ADJ distant))
(N town))))
(NP (D the)
(N ascent)
(PP (P-ROLE of)
(NP (D a)
(ADJP (ADJ human))
(N figure)))
(PP (P-ROLE from)
(NP (D the)
(N direction)))
(PP (P-ROLE of)
(NP (D the)
(ADJP (ADJ distant))
(N town))))
yes
We can see that attachment ambiguity leads to five distinct structures returned in the results of (3.41). Of these, it is only the third structure where all attachments are found to make semantic sense, but the rules we have are not sensitive to this distinction.
In addition to the attachment ambiguity revealed in the results of (3.41), there is further parsing variation unseen in the results in regards to how the parsing rules are applied. For example, there are different ways to derive the semantically valid third structure of (3.41), e.g., from the call structure of (3.42) or the call structure of (3.43).
- (3.42)
-
noun_phrase general
|
noun_phrase_top general
|
noun_phrase_initial_layer general
|
determiner_layer general
|
det general
|
[w('D','the')]
|
|
|
internal_np_higher_layer
|
internal_np_higher_layer
|
|
preposition_phrase general
|
preposition_phrase_layer general
|
|
noun_phrase general
|
noun_phrase_top general
|
noun_phrase_initial_layer general
|
|
internal_np_higher_layer
|
adjective_phrase general
|
adjective_phrase_layer general
|
adj general
|
[w('ADJ','human')]
|
|
|
|
|
|
|
|
|
|
|
|
preposition_phrase general
|
preposition_phrase_layer general
|
role
|
[w('P-ROLE','from')]
|
|
noun_phrase general
|
noun_phrase_top general
|
noun_phrase_initial_layer general
|
determiner_layer general
|
det general
|
[w('D','the')]
|
|
|
internal_np_higher_layer
|
internal_np_higher_layer
|
internal_np_lower_layer
|
noun
|
[w('N','direction')]
|
|
|
preposition_phrase general
|
preposition_phrase_layer general
|
|
noun_phrase general
|
noun_phrase_top general
|
noun_phrase_initial_layer general
|
determiner_layer general
|
det general
|
[w('D','the')]
|
|
|
internal_np_higher_layer
|
adjective_phrase general
|
adjective_phrase_layer general
|
adj general
|
[w('ADJ','distant')]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- (3.43)
-
noun_phrase general
|
noun_phrase_top general
|
noun_phrase_initial_layer general
|
noun_phrase_initial_layer general
|
noun_phrase_initial_layer general
|
determiner_layer general
|
det general
|
[w('D','the')]
|
|
|
|
|
preposition_phrase general
|
preposition_phrase_layer general
|
|
noun_phrase general
|
noun_phrase_top general
|
noun_phrase_initial_layer general
|
|
internal_np_higher_layer
|
adjective_phrase general
|
adjective_phrase_layer general
|
adj general
|
[w('ADJ','human')]
|
|
|
|
|
|
|
|
|
|
|
|
preposition_phrase general
|
preposition_phrase_layer general
|
role
|
[w('P-ROLE','from')]
|
|
noun_phrase general
|
noun_phrase_top general
|
noun_phrase_initial_layer general
|
noun_phrase_initial_layer general
|
determiner_layer general
|
det general
|
[w('D','the')]
|
|
|
internal_np_higher_layer
|
internal_np_lower_layer
|
noun
|
[w('N','direction')]
|
|
|
|
|
preposition_phrase general
|
preposition_phrase_layer general
|
|
noun_phrase general
|
noun_phrase_top general
|
noun_phrase_initial_layer general
|
determiner_layer general
|
det general
|
[w('D','the')]
|
|
|
internal_np_higher_layer
|
adjective_phrase general
|
adjective_phrase_layer general
|
adj general
|
[w('ADJ','distant')]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Looking back at the rules for noun phrase construction, we can see that the variations in call structure between (3.42) and (3.43) arise from there being multiple opportunities within the structure of a noun phrase for integrating preposition phrases. Notably, there are recursive rules with noun_phrase_initial_layer of (3.6) and internal_np_higher_layer of (3.14) that will find a preposition phrase on the right edge of noun phrase structure.