lpthw ex49解析关键词

      在类Zork类游戏中,玩家的输入常常不是固定的,甚至可以有语法错误,但是程序不能因此卡到这里,中断是最差劲的,不停的提示异常也很烦,程序仍要做出决定,所以需要解析关键词。

       比如我想表达,我要往南方走,我的表述可以是以下(甚至有语法错误):

       i will go north

       i will go to the north

       go to the north

       go north

       .....

一句话最基本的关键词为主、谓、宾, 比如我要去南方,主语“我”,谓语“去”,宾语“南方”。如何提取这些关键词?

 

文件:lexicon.py、parser.py

lexicon.py的结构

                lexicon = {key1: type1, key2: type2, ......}

                def scan(sentence):

作用:得到一个以(key: type)元素的列表。

流程

    (1)lexicon是一个字典,储存了可能用到的单词以及它的类型,比如go to the north,字典的内容可以包括:

             lexicon = {......

                              "go": "verb",

                              "to" : "trash",

                              "the": "trash",

                              "north": "noun"

                              ......}

    (2)sentence 为一个 string 参数.

            (a) scan()函数得到一个sentence,先构造一个列表储存它的每一个单词。

                 比如得到 words = ["go", "to", "the", "north"]

            (b)将words中的每一个元素对照字典得到它的类型, 并把它们存储到一个列表中。

                 比如得到word_list = [("go", "verb"), ("to", "trash"), ("the", "trash"), ("north", "noun")]

 

parser.py的结构:

                class ParserError(Exception):                # 抛出异常

                class Sentence(object):                         # 有三个变量,分别储存主谓宾关键词

                def peek(word_list):                              # 返回 word_list的第一个元素的类型

                def match(word_list, expecting):          # 如果word_list第一个元素的类型等于预期的类型,返回这个元组。

                                                                                 并在word_list中剔除这个元组。 

                def skip(word_list, word_type):            #  剔除word_list的word_type元素直到遇到第一个非word_type元素

                def parse_verb(word_list):                    # 得到verb类型的元素,并在word_list中剔除

                def parse_object(word_list):                 # 得到object类型的元素,并在word_list中剔除

                def parse_subject(word_list):                # 得到subject类型的元素,并在word_list中剔除

                def parse_sentence(word_list):             # 得到一个Sentence对象,有不同的变量储存相应的关键词。

 

 

总的流程:

(1)lexicon.py 得到raw word_list.

(2)parser.py 解析word_list得到关键词。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值