Отчет по программе pc-patr
При изучении синтаксического анализатора «PC-PATR» перед нами стояла задача познакомиться с работой программы и её возможностями, провести синтаксический анализ предложений из карточки с заданиями средствами данной программы.
«PC-PATR» позволяет описывать синтаксис языка как совокупность правил, описываемых при помощи грамматики непосредственных составляющих. Также программа PC-PATR осуществляет разложение предложения на части речи, определяемые пользователем в лексиконе программы.
Для нашей работы использовались следующие предложения из карточки №9:
He explained that under a cease-fire agreement between the Taliban and the army, all civilians were required to get out of their cars when an army convoy approached.
The soldier was in the lead vehicle of a Pakistani Army supply convoy in North Waziristan.
The Taliban guard beside me loaded his rifle and ordered me to put a scarf over my face.
The trip confirmed suspicions I had harbored for years as a reporter.
My captors assailed the West for killing civilians, but they celebrated suicide attacks orchestrated by the Taliban that killed scores of Muslim bystanders.
Для работы с программой необходимо было создать несколько файлов:
1.lex (файл лексикона),
1.grm (файл грамматики),
1.sen (содержит предложения для анализа)
1.par (остается пустым, служит для передачи данных анализа)
1.tak (содержит заранее прописанную последовательность команд и во многом облегчает дальнейшую работу).
Содержание файла 1.tak:
set trim off
set failure on
l g 1.grm
l l 1.lex
file parse 1.sen 1.par
Содержание файла 1.grm:
LET sg be <head number> = SG
LET proper be <head proper> = +
LET acc be <head case> = ACC
LET wh be <head wh> = +
LET 1 be <head person> = 1
<head agr 3sg> = -
LET 2 be <head person> = 2
<head agr 3sg> = -
LET 3 be <head person> = 3
<head agr 3> = +
LET s be [head: [tense: PRES
agr: [3sg: +]
finite: +
vform: S]]
LET neg be <head neg> = +
LET vbase be [head: [finite: -
vform: BASE]]
LET N be <cat> = N
<head pos> = N
<head agr 3sg> = !+
<head number> = !SG
<head proper> = !-
<head verbal> = !-
<root_pos> = !N
LET PR be <cat> = PR
<head pos> = PR
<head agr 3sg> = !+
<head person> = !3
<head number> = !SG
<head case> = !NOM
<head reflex> = !-
<head wh> = !-
LET V be <cat> = V
<head pos> = V
<root_pos> = !V
LET AUX be <cat> = AUX
<head pos> = AUX
<head neg> = !-
<root_pos> = !AUX
<head auxform> = <gloss>
LET AUX-NEG be <cat> = AUX
<head pos> = AUX
<head neg> = !+
<root_pos> = !AUX
<head auxform> = <gloss>
LET AJ be <cat> = AJ
<head pos> = AJ
<head verbal> = !-
<root_pos> = !AJ
<head aform> = !POS
LET DT be <cat> = DT
<head pos> = DT
LET CJ be <cat> = CJ
<head pos> = CJ
LET Vform be <cat> = Vform
<head pos> = Vform
LET Prep be <cat> = Prep
<head pos> = Prep
RULE
S = (NP) VP (SubC1)
<NP head agr> = <VP head agr>
<NP head case> = NOM
<S subj> = <NP>
<S head> = <VP head>
RULE
S = VP_1 NP VP
<NP head case> = NOM
<S subj> = <NP>
<S head> = <VP head>
RULE
NP = Vform NP_1
RULE
PrepP = Prep NP
RULE
NP = (Det) (AdjP) N / PR
<NP head> = <N head>
<NP head> = <PR head>
RULE
Det = DT
RULE
VP = VerbalP (NP / AdjP)
<NP head case> = ACC
<NP head verbal> = -
<VP head> = <VerbalP head>
RULE
VerbalP = AUX V / (PR) AUX
<V head finite> = -
<VerbalP head> = <AUX head>
<VerbalP head partform> = <V head vform>
RULE
VerbalP = V
<V head finite> = +
<VerbalP head> = <V head>
RULE
VerbalP = V
<V head finite> = -
<VerbalP head> = <V head>
RULE
SubC1 = CJ S
RULE
AdjP = AJ (AdjP_1)
Содержание файла 1.lex:
\w a
\c DT
\f sg
\w an
\c DT
\f sg
\w the
\c DT
\f
\w agreement
\c N
\g 'agreement
\ sg
\w army
\c N
\g `army
\f sg acc
\w civilians
\c N
\g `civilian +s
\f pl
\w soldier
\c N
\g `soldier
\f sg
\w guard
\c N
\g `guard
\f sg
\w trip
\c N
\g `trip
\f sg
\w reporter
\c N
\g `reporter
\f sg
\w captors
\c N
\g `captor +s
\f pl
\w cars
\c N
\g 'car +s
\f pl acc
\w vehicle
\c N
\g `vehicle
\f sg acc
\w Taliban
\c N
\g 'Taliban
\f proper
\w Pakistani
\c N
\g 'Pakistani
\f proper
\w Army
\c N
\g 'Army
\f proper
\w North
\c N
\g 'North
\f proper
\w Waziristan
\c N
\g 'Waziristan
\f proper
\w West
\c N
\g 'West
\f proper
\w Muslim
\c N
\g 'Muslim
\f proper
\w rifle
\c N
\g `rifle
\f sg acc
\w convoy
\c N
\g 'convoy
\f sg acc
\w scarf
\c N
\g 'scarf
\f sg acc
\w face
\c N
\g 'face
\f sg acc
\w suspicions
\c N
\g 'suspicion +s
\f pl acc
\w years
\c N
\g 'year +s
\f pl acc
\w civilians
\c N
\g 'civilian +s
\f pl acc
\w attacks
\c N
\g 'attack +s
\f pl acc
\w scores
\c N
\g 'score +s
\f pl acc
\w bystanders
\c N
\g 'bystander +s
\f pl acc
\w he
\c PR
\g
\w they
\c PR
\g
\w me
\c PR
\g
\w were
\c AUX
\g `be +plPAST
\f vbase
\w had
\c AUX
\g `have +PAST
\f vbase
\w was
\c AUX
\g `be+sgPAST
\f vbase
\w when
\c CJ
\g
\w and
\c CJ
\g
\w that
\c CJ
\g
\w between
\c CJ
\g
\w but
\c CJ
\g
\w explained
\c V
\g `explain +ed
\f vbase
\w required
\c V
\g 'require +ed
\f vbase
\w get
\c V
\g `get
\f vbase
\w approached
\c V
\g `approach +ed
\f vbase
\w loaded
\c V
\g `load +ed
\f vbase
\w ordered
\c V
\g `order +ed
\f vbase
\w put
\c V
\g `put
\f vbase
\w confirmed
\c V
\g `confirm +ed
\f vbase
\w harbored
\c V
\g `harbor +ed
\f vbase
\w assailed
\c V
\g `assail +ed
\f vbase
\w celebrated
\c V
\g `celebrate +ed
\f vbase
\w killed
\c V
\g `kill +ed
\f vbase
\w cease-fire
\c AJ
\g 'cease-fire
\w army
\c AJ
\g 'army
\w lead
\c AJ
\g 'lead
\w supply
\c AJ
\g 'supply
\w killing
\c AJ
\g 'killing
\w suicide
\c AJ
\g 'suicide
\w orchestrated
\c AJ
\g `orchestrated
\w his
\c AJ
\g `his
\w their
\c AJ
\g `their
\w my
\c AJ
\g `my
\w all
\c AJ
\g `all
\w in
\c Prep
\g `in
\w over
\c Prep
\g `over
\w out
\c Prep
\g `out
\w under
\c Prep
\g `under
\w to
\c Prep
\g `to
\w of
\c Prep
\g `of
\w beside
\c Prep
\g `beside
\w for
\c Prep
\g `for
\w as
\c Prep
\g `as
\w by
\c Prep
\g `by
Результатом нашей работы стало то, что программа могла показывать на выходе верное древо зависимостей компонентов структуры предложения.
Таким образом, в ходе работы мы ознакомились с устройством программы PC-PATR и научились проводить синтаксический анализ. Также мы освоили принцип разработки грамматических правил для конечного набора предложений и научились устранять многозначность разборов предложений.
В ходе выполнения задания мы столкнулись с рядом трудностей, а именно, тэг /f (features) вызвал большое количество проблем, а также где и каким образом декларировать назначенные в лексиконе features. Как выяснилось, features необходимо прописывать в файле грамматики .grm с помощью команды LET перед написанием правил. Features используются для детализации грамматических правил анализируемого языка.
В целом, можно сказать, что данная программа, несмотря на некоторые недочеты, полезна и может существенно облегчить синтаксический анализ предложений.