即时标记简单解决

来源:互联网 发布:ubuntu文字识别软件 编辑:程序博客网 时间:2024/05/16 02:57

问题描述:

问题来源与《Python基础教程》第二十个章节

假设你从一个不想写HTML代码的人那里得到了一个文件,希望将它作为一个网页来使用,你本身也不想自己手的那个的为文档添加所需要的全部标签,而是想要让程序自动完成。程序所要做的工作就是就是将各种文本元素分类,比如标题和被强调的文本,然后明确的标记他们。

完成的目标:

输入不应该包含人工代码或者标签。

程序能够处理不同的块(block),比如标题、段落、列表项、内嵌文本(比如被强调的文本和URL

如果处理的不仅仅HTML,能够扩展到其他的标记语言就更好了。

 

初次实现

首先要做的是把文本切成段落,在测试文档中,段落与段落之间用空格格开了。所以找到一个段落的简单方法就是收集遇到的所有的行,直到遇到一个空行,然后返回已经收集的行。那些返回的行就是一个段落。之后,在开始收集,不需要收集空行,也不要返回空段落(在遇到多个空行时)。同时,要群豹文件的最后一行是空行,否则,程序就不知道什么时候结束。

文本生成器,代码如下(util.py

 

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 = []

 

实现简单的标记:

打印一些开始标记;

打印每个用段落标签括起来的块;

点一些结束标记;

对于第一个段落,用(h1)括起来,区分标题与段落,代码(simple_makeup.py)实现如下:

import sys, refrom util import *print('<html><head><title>...</title><body>') title = Truefor block in blocks(open(r'D:\Python27\test_input.txt')):    block = re.sub(r'\*(.+?)\*',r'<em>\1</em>',block)    if title:        print('<h1>')        print block        print('</h1>')        title = False    else:        print('<p>')        print block        print('</p>')print('</body></html>')

实现结果简单的区分了标题和段落:


0 0
原创粉丝点击