python nltk 8 分析句子结构

英文文档 http://www.nltk.org/book/
中文文档 https://www.bookstack.cn/read/nlp-py-2e-zh/0.md
以下编号按个人习惯

Analyzing Sentence Structure(分析句子结构)

1 Some Grammatical Dilemmas(一些语法困境)

歧义在语言中是普遍存在的,重要的目的是能够理解自然语言。

2 What’s the Use of Syntax?(语法有什么用)

2.1 Beyond n-grams(超越n-grams)

下图中,我们系统地将较长的序列替换为较短的序列,并且保留了语法性。每个组成单元的序列实际上都可以被一个单词替换,最后我们只得到两个元素。
在这里插入图片描述
替换单词序列:从第一行开始,我们可以将特定的单词序列(例如the brook)替换为单个的单词(例如it);重复这个过程,我们得到一个合乎语法的两个词的句子。

3 Context Free Grammar(上下文无关语法)

无上下文语法定义在nltk.grammar模块中。下面例子定义了一个简单的语法,并用其解析句子。
上下文无关语法不考虑它所处的上下文。

# 简单的无上下文语法
def asimple_grammar():
    grammar1 = CFG.fromstring("""
        S -> NP VP
        VP -> V NP | V NP PP
        PP -> P NP
        V -> "saw" | "ate" | "walked"
        NP -> "John" | "Mary" | "Bob" | Det N | Det N PP
        Det -> "a" | "an" | "the" | "my"
        N -> "man" | "dog" | "cat" | "telescope" | "park"
        P -> "in" | "on" | "by" | "with"
        """)

    sent1 = "Mary saw Bob".split()
    rd_parser = nltk.RecursiveDescentParser(grammar1)
    # 解析sent1。只有一种结果
    for tree in rd_parser.parse(sent1):
        print(tree)

    sent2 = "the dog saw a man in the park".split()
    # 解析sent2,得到两棵树,则在结构上有歧义——介词短语附件歧义
    for tree in rd_parser.parse(sent2):
        print(tree)

可以在一个文件中自己编写语法,并加载。

# 在文件mygrammar.cfg中,编写自己的语法。
# 加载自定义的语法文件
grammar1 = nltk.data.load('file:mygrammar.cfg')

mygrammar.cfg文件中内容如下:

S -> NP VP
VP -> V NP | V NP PP
PP -> P NP
V -> "saw" | "
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值