分词驱动的parser vs. meta character驱动
来源:互联网 发布:新手开淘宝卖什么好 编辑:程序博客网 时间:2024/06/06 16:39
字符分为
alphabet character
meta character
主框架就是分词,分出一个词做什么处理的问题,这个是根据当前的状态。而meta character主要就是决定状态。比如json parser,当分出一个词后,如果当前处在一个list的scope里,(之前出现过"[",还未出现"]"),那就parent.append(word),如果当前处在一个dict里,且在key的部分,则记录key = word,如果在value的部分,则parent[key] = word
[, ], {, }, : 等meta character主要就是负责更新scope、状态。引号的意思是强制分词,即不用自己分词,而是强制两个引号之间的字符串,有特殊字符也好,有空白也好都不管,作为一个word。
而meta character驱动的事件是出现了一个什么语法字符(:,{}等)然后做什么处理的问题,其实差不多,meta character驱动更全面一些,和分词也不矛盾,分词是给出当前数据,语法字符判断、更新状态。另一个版本的json parser, 分词驱动的思想:
def parseJson(json): stack, meta, wordStart, inQuote, key = [[]], '[]{},: \t"', -1, False, [None] def handle(item): if isinstance(item, str): if item.isdigit(): item = int(item) #convert to int if item is literal value and all numbers elif item[0] == '"': item = item[1: -1] if isinstance(stack[-1], list): stack[-1].append(item) #container is list elif key[0] is None: key[0] = item else: stack[-1][key[0]] = item key[0] = None if isinstance(item, list) or isinstance(item, dict): stack.append(item) for i in xrange(len(json)): if inQuote: if json[i] == '"': handle(json[wordStart: i + 1]) inQuote = False elif json[i] not in meta: if i == 0 or json[i - 1] in meta: wordStart = i if i == len(json) - 1 or json[i + 1] in meta: handle(json[wordStart: i + 1]) elif json[i] == '"': inQuote = True wordStart = i elif json[i] in '{[': handle([] if json[i] == '[' else {}) elif json[i] in ']}': stack.pop() return stack[-1][0] if len(stack[-1]) > 0 else None
0 0
- 分词驱动的parser vs. meta character驱动
- 关系驱动vs内容驱动
- 事件驱动VS消息驱动
- Stanford分词,Parser以及ICTCLAS的使用
- Stanford-parser分解 分词后的数据
- VS 2008研发驱动
- String 的 split 异常:Dangling meta character
- javax.management.MalformedObjectNameException: Invalid character '' in value part of property ,Oracle 驱动包的错误
- javax.management.MalformedObjectNameException: Invalid character '' in value part of property ,Oracle 驱动包的错误
- 关于vs编译的驱动体积大小问题
- 事件驱动的单线程模型 VS 多线程模型
- VisualGDB vs 2008 vs2010 的集成驱动调试环境.
- 驱动
- 驱动
- 驱动
- 驱动
- 驱动
- 驱动
- MongoDB数组修改器更新数据
- Volley android 多key 多File 文件上传,目前只实现了两个key,实现多key请自己改
- Joda-Time 简介(引用)
- Mongodb数据库操作
- jRange滑动选取数值范围插件
- 分词驱动的parser vs. meta character驱动
- 最新测试结果
- linux常见命令
- WriteBytes
- 检查点
- 如何解决每次打开office2010都会出现正在配置
- POJ 3189 最大流 枚举
- 资源
- Using HDInsight tools to optimize hive script