我在机器翻译项目中工作。我需要识别一个句子的主语,动词,宾语,以便继续我的工作。目前我正在使用Stanford NLP解析器来分析句子。但我不知道如何提取SVO。我能考虑的任何想法吗?
答案 0 :(得分:2)
如果您想要对英语句子进行全面分析,我认为这将非常困难。 首先,您需要一本字典,其中包含单词的所有可能的词性。 然后你将根据几个规则构建句子的结构。
一些最基本的规则是这样的:
NP(Noun Phrase): N(Noun),
Pronoun,
[any number of ADJP(Adjective Phrase)] + N,
NP + [any number of ADJP],
NP + CONJ + NP
ADJP(Adjective Phrase): ADJ(Adjective),
[any number of ADVP(Adverb Phrase)] + ADJP,
PREP(Preposition) + NP
ADVP(Adverb Phrase): ADV(Adverb),
ADV + ADVP
VP(Verb Phrase): Vi(Intransitive Verb),
Vt(Transitive Verb) + NP,
VP + [any number of ADVP],
VP + CONJ + VP,
[any number of ADVP] + VP
S(Sentence): NP(Noun Phrase) + VP(Verb Phrase),
NP + AUX_V(Auxiliary Verb) + VP,
VP(Verb Phrase) (<=imperative sentence),
S + CONJ + S
使用这些规则,可以分析很多句子,包括
My dog runs very fast.
=> ADJ N Vi ADV ADV
=> (ADJ N) (Vi) (ADV ADVP)
=> (NP) (VP ADVP )
=> (NP VP)
=> (S)
和
I do not really like snacks like chips or candy.
=> N AUX_V ADV ADV Vt N PREP N CONJ N
=>(NP)(AUX_V)(ADV)(ADV) (Vt) (NP) (PREP (NP CONJ NP))
=>(NP)(AUX_V)(ADV)(ADV) (Vt) (NP) (PREP NP)
=>(NP)(AUX_V)(ADV)(ADV) (Vt) (NP ADJP)
=>(NP)(AUX_V)(ADV)(ADV) (Vt NP)
=>(NP)(AUX_V)(ADVP ADVP VP)
=>(NP AUX_V VP)
=> (S)
但它仍然无法分析复杂的句子,如:
He is the one who won the Nobel Prize in 2014.
或
It is computers that brought the biggest change to our lives in history.
您需要在子句和连词上添加规则(例如“while”,“when”和“if”)。 您还需要添加关于不定式和动名词的规则。 你仍然需要在带有两个对象的动词上添加规则(比如“give”和“tell”),以及带有对象状态的动词(如“look”,“seem”和“get”,还有“make”)在“我让你生气。”) ......
在您添加了英语中的所有规则后,需要处理更复杂的事情。 例如,
They are hunting dogs.
(这句话有两种可能的结构,因此产生两种不同的含义;一种是“猎犬”是ADJP,另一种是它是NP。)
或
She told me that she loved me, which was a lie.
(在这种情况下,“这是谎言”条款(ADJP)描述NP“她爱我”,但理论上可能该条款描述“我”(代词也是NP)或整个部分“她告诉我她爱我”。该程序必须能够以某种方式弄清楚最有可能是第一个。)
所以我认为我会做的是根据字典和规则构建类似于表示可能结构的图形,同时按字处理句子,然后应用禁忌搜索来减少可能性,最后我会必须使用统计方法或以其他方式使计算机了解现实世界的情况,以便从剩下的几种可能性中选择最可能的结构。
顺便说一句,当我进入最后一个例子时,斯坦福解析器给出了错误的结构。 它给了“她告诉我她爱[我,这是谎言]”。像这样,让这种事情完美地运作并不容易。
答案 1 :(得分:0)
对我来说似乎很简单:主语与动词的解析共同深入,而对象通常是动词短语中的第一个NP。也就是说,确定元素的句法状态不一定是涵盖所有边缘情况的简单任务。