美文网首页
信息组织和提取方法

信息组织和提取方法

作者: 天道酬勤_FUN | 来源:发表于2017-04-18 14:34 被阅读0次

    信息标记的三种形式

    信息的标记

    • 标记后的信息可形成信息组织结构,增加了信息的维度
    • 标记后的信息可用于通信、存储或展示
    • 标记的结构与信息一样具有重要价值
    • 标记后的信息更利于程序理解和运用

    信息标记的三种形式:

    XMLJSONYAML

    • XML eXtensible Markup Language
    • JSON JavaScript Object Notation
         "key":"value"
         "key":["value1","value2"]
         "key":{"subkey":"subvalue"}
    
    • YAML YAML Ain't Markup Language
      • 无类型键值对 key:value,缩进来表达所属关系
         name: 北京理工大学
         name:
              newName:北京理工大学
              oldName:延安自然科学院
    
    \- 表达并列关系
    
        name:
        \- 北京理工大学
        \- 延安自然科学院
    
    | 表达整块数据 \# 表示注释
    
    text: | #学校介绍
    北京理工大学创立于1940年,前身是。。。。。
    

    三种信息标记形式的比较

    XML实例

    <person>
        <firstName>Tian</firstName>
        <lastName>Song</lastName>
        <address>
            <streetAddr>中关村南大街5号</streetAddr>
            <city>北京市</city>
            <zipcode>100081</zipcode>
        </address>
        <prof>Computer System</prof><prof>Security</prof>
    </person>
    

    JSON实例

    {
        "firstName" : "Tian" ,
        "lastName"  : "Song" ,
        "address"   : {
                       "streetAddr" : "中关村南大街5号" , 
                       "city"       : "北京市" ,
                       "zipcode"    : "100081"
                      } ,
        "prof"      : [ "Computer System", "Security" ]
    }
    

    YAML实例

    firstName : Tian
    lastName  : Song
    address   :
        streetAddr : 中关村南大街5号
        city       : 北京市
        zipcode    : 100081
    prof :
    - Computer System
    - Security
    
    比较

    XML 最早的通用信息标记语言,可扩展性好,但繁琐。
    JSON 信息有类型,适合程序处理(js),较XML简洁。
    YAML 信息无类型,文本信息比例最高,可读性好

    用途

    XML Internet上的信息交互与传递。
    JSON 移动应用云端和节点的信息通信,无注释。
    YAML 各类系统的配置文件,有注释易读。

    信息提取的一般方法

    • 方法一:完整解析信息的标记形式,再提取关键信息。
      XML JSON YAML
      需要标记解析器 例如:bs4库的标签树遍历
      优点:信息解析准确
      缺点:提取过程繁琐,速度慢。
    • 方法二:无视标记形式,直接搜索关键信息
      搜索
      对信息的文本查找函数即可。
      优点:提取过程简洁,速度较快
      缺点:提取结果准确性与信息内容相关。

    融合方法:结合形式解析与搜索方法,提取关键信息

    XML JSON YAML 搜索
    需要标记解析器及文本查找函数。

    实例

    提取HTML中所有URL链接
    思路:1)搜索到所有a标签
    2)解析a标签格式,提取href后的链接内容。

    from bs4 import BeautifulSoup
    soup = BeautifulSoup(demo, "html.parser")
    for link in soup.find_all('a'):
        print(link.get('href'))
    

    基于bs4库的HTML内容查找方法

    <>.find_all(name, attrs, recursive, string, **kwargs)
    返回一个列表类型,存储查找的结果。
    name:对标签名称的检索字符串。
    attrs:对标签属性值的检索字符串,可标注属性检索。
    recursive:是否对子孙全部检索,默认True。
    string:<>..</>中字符串区域的检索字符串。

    soup.find_all('a')
    soup.find_all(['a', 'b'])
    
    import re
    for tag in soup.find_all(re.compile('b')):
        print(tag.name)
    
    soup.find_all('p', 'course')
    
    soup.find_all(id='link1')
    
    import re
    soup.find_all(id=re.cmpile('link'))
    
    soup.find_all('a', recursive=False)
    
    soup.find_all(string = "Basic Python")
    
    import re
    soup.find_all(string = re.compile("python"))
    

    <tag>(..) 等价于<tag>.find_all(..)
    soup(..) 等价于 soup.find_all(..)

    扩展方法

    方法 说明
    <>.find() 搜索且只返回一个结果,字符串类型,同.find_all()参数
    <>.find_parents() 在先辈节点中搜索,返回列表类型,同.find_all()参数
    <>.find_parent() 在先辈节点中返回一个结果,字符串类型,同.find()参数
    <>.find_next_siblings() 在后续平行节点中搜索,返回列表类型,同.find_all()参数
    <>.find_next_sibling() 在后续平行节点中返回一个结果,字符串类型,同.find()参数
    <>.find_previous)siblings() 在前序平行节点中搜索,返回列表类型,同.find_all()参数
    <>.find_previous_sibling() 在前序平行节点中返回一个结果,字符串类型,同.find()参数

    相关文章

      网友评论

          本文标题:信息组织和提取方法

          本文链接:https://www.haomeiwen.com/subject/fbbfzttx.html