前面章节的简单总结
前面的学习中,主要焦点在与 词汇。
如何识别,分析词汇的结构、分配词汇类别、以及获得词汇的含义。
还有如何识别词汇序列或者n-gram的模式。
8.1一些语法困境
语言数据和无限可能性
每天都在增加电子语言,数据量是非常大的;
句子的组合具有无线的可能性;
普遍存在的歧义
让我们仔细看看短语I shot an elephant in mypajamas中的歧义。
这里有一个文法:
>>>groucho_grammar= nltk.parse_cfg(""" ... S -> NPVP ... PP-> PNP ... NP-> DetN| DetNPP| 'I' ... VP-> VNP| VPPP ... Det-> 'an' | 'my' ... N-> 'elephant' | 'pajamas' ... V-> 'shot' ... P -> 'in' ... """)
经过这个文法分析,是有歧义的:
>>>sent = ['I', 'shot', 'an', 'elephant', 'in', 'my', 'pajamas'] >>>parser = nltk.ChartParser(groucho_grammar) >>>trees = parser.nbest_parse(sent) >>>for tree in trees: ... print tree (S (NP I) (VP (V shot) (NP (Det an) (N elephant) (PP (P in) (NP (Det my)(N pajamas)))))) (S (NP I) (VP (VP (V shot) (NP (Det an) (N elephant))) (PP (P in) (NP (Det my)(N pajamas)))))
有两种分析方式,可以用树来表示: