栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

python基础项目一:自动添加标签

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

python基础项目一:自动添加标签

这个项目来自于《python基础教程》练习一

项目概述
这是一个针对纯文本自动添加标签生成html或者其他可以文本格式
项目思路
首先,要根据整个文本找出文本块;这个文本块可能是标题或者列表。
然后,可以设置规则将找出的块添加上一些标签
项目的初次实现 找出文本块
1.收集空行前的所有行并将它们返回;由于最后一行没有空行,一种思路是添加上空行
def lines(file):
#在文件的末尾增加一个空行,确保下面可以找到每个文本块
    for line in file:
        yield line
        yield "n"

def blocks(file):
    block = []  #存放块
    for line in lines(file):
        if line.strip(): #过滤空白
            block.append(line)
        elif block: #找出文本块
            yield  ''.join(block).strip()
            block = []
为文本添加标签
可以为文本添加一些(规则)标签,如标题等
项目的再次实现
首先,为了提高程序的可扩展性,需要模块化,面向对象设计。
根据前面的初次实现,可以有:
1.可以保持找出文本块的模块继续使用
2.处理程序
    不管时html还是其他标记文本,他们都有一套独立的处理标签

...

,为此,可以将这部分独立出一个处理程序,这个模块可以实现不同的文本格式的处理; 处理程序的超类: 为了提高程序的灵活性;在超类实现一个start,end,sub方法;我们可以根据关键字直接调用对应的方法; 3.规则模块 前面的处理程序灵活性和可扩展性都非常高了;完成的实际上是添加不同的标记;但是我们任然不知道什么内容应该添加什么样的标记;为此,独立一个规则模块;为避免像前面一样使用各种if语句判断; 规则需要的功能如下: 知道自己适用于那种文本块(条件) 对文本块进行转换(操作) 因此,每个柜子对象都必须包含两个方法:condition和action condition方法: 方法condition用于指出当前的规则是否适用于处理指定的文本块;返回布尔值; action方法: action方法需要能够访问处理程序完成处理;通常情况下,一个文本块只对应一种处理,比如,发现使用了标题规则,就不会使用段落规则;但是有可能应用一个规则后再次应用其他规则,因此,在action添加一项功能,返回布尔值,支出是否结束对文本块的处理。 规则的超类: 多个规则都可能实现相同的操作,调用处理程序的方法:start,end,feed 规则: 根据实际情况创建规则: 标题:只包含一行的文本块,长度最多为70个字符,以冒号结束的文本块不属于标题 列表项: 题目: 4.过滤器 在正文中有一些,特殊的文本,如:网址、邮箱,需要用过滤器;只需调用re.sub()即可,sub可以接收一个可调用的对象,传递了match对象并且必须返回要使用的替换字符串
re.sub()
Return the string obtained by replacing the leftmost
    non-overlapping occurrences of the pattern in string by the
    replacement repl.  repl can be either a string or a callable;
    if a string, backslash escapes in it are processed.  If it is
    a callable, it's passed the Match object and must return
    a replacement string to be used
5.解析器
    解析器要完成声明工作呢?
    完成准备工作:hander的初始化,规则列表、过滤列表的初始化
    添加规则的方法
    添加过滤器的方法
    解析文本的方法
整合起来
只需要创建一个parser对象,并添加相应的规则和过滤器即可
总结
项目的再次实现通过模块化将程序变得扩展性很好;极大的丰富了使用范围;同时项目也变得更为复杂。
重构之后的程序分为四个模块:处理程序、规则、过滤器、解析器;为处理程序和规则程序添加了超类,使得对象的访问更为容易;
在解析器模块:通过设置规则和过滤列表使得程序的灵活性力高
在规则模块:每个规则都使用一个类来定义,避免了过多的if...else,程序的结果更加清晰
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/744857.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号