信息提取笔记

信息提取


一:信息标记的三种形式
1、XML(eXtensible Markup Language)


XML实例

<person>
    <firstName></firstName>
    <lastName></lastName>
    <address>
        <streeAddr>光棍村光棍街一号</streeAddr>
        <city>光棍市</city>
        <zipcode>1111</zipcode>
    </address>
    <prof>Computer System</prof><prpf>Security</prpf>
</person>

2、JSON(JavsScript Object Notation)

"key" : "value"
"key" : ["value1", "value2"]
"key" : {"subkey" : "subvalue"}

有类型的键值对 key:value

①、“key”:“value”

"name":四川 # 引号内的name作为类型


②、“key”:[“value1”,“value2”]

"name":["四川","川"] #多个值用[,]组织


③、“key”:{“subkey”:“subvalue”}

"name":{

"newName":"川",

"oldName":"蜀"

} #键值对嵌套用{,}


JSON实例

{
    "firstName":"三",
    "lastName":"张",
    "address":{
                "streeAddr":"光棍村光棍街一号",
                "city":"光棍市",
                "zipcode":"1111"
                },
    "prof":["Computer System","Security"]
}

3、YAML(YAML Ain’t Markup Language)

key : value key : #Comment value1 value2 key : subkey : subvalue

无类型键值对 key:value

name:"四川" #这个时候的name仅仅是字符串


①、缩进表达所属关系

name:

newName:川

oldName:蜀


②、表达并列关系

name:

四川


③、表达整块数据 #表示注释

text:| 省份介绍

四川,简称川或蜀,是中国23个省之一,省会成都。位于中国西南地区内陆,界于北纬26°03′~34°19′,东经97°21′~108°12′之间,东连重庆,南邻云南、贵州,西接西藏,北接陕西、甘肃、青海。


firstName :lastName :address :
	streetAddr : 光棍村光棍街一号
	city : 光棍市
	zipcode : 1111
prof :
Computer System
Security

二:三种信息标记形式的比较
种类特点
XMLInternet上的信息交互与传递;最早的通用信息标记语言,可扩展性好,但繁琐
JSON移动应用云端和节点的信息通信,无注释;信息有类型,适合程序处理(js),较XML简洁
YAML各类系统的配置文件,有注释易读;信息无类型,文本信息比例最高,可读性好

三:信息提取的一般方法
1、方法一:完整解析信息的标记形式,再提取关键信息

需要标记解析器,例如:bs4库的标签树遍历;

优点:信息解析准确 ;

缺点:提取过程繁琐,速度慢。


2、方法二:无视标记形式,直接搜索关键信息

对信息的文本查找函数即可

优点:提取过程简洁,速度较快;

缺点:提取结果准确性与信息内容相关。


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

需要标记解析器及文本查找函数


实例
1、提取HTML中所有URL链接

思路:搜索到所有标签,解析标签格式,提取href后的链接内容

import requests
from bs4 import BeautifulSoup
response = requests.get("http://www.baidu.com")
Demo = response.text
soup = BeautifulSoup(Demo, "html.parser")
for link in soup.find_all('a'):
    print(link.get('href'))
运行结果:
http://news.baidu.com
http://www.hao123.com
http://map.baidu.com
http://v.baidu.com
http://tieba.baidu.com
http://www.baidu.com/bdorz/login.giflogin&tpl=mn&u=http%3A%2F%2Fwww.baidu.com%2f%3fbdorz_come%3d1
//www.baidu.com/more/
http://home.baidu.com
http://ir.baidu.com
http://www.baidu.com/duty/
http://jianyi.baidu.com/

Process finished with exit code 0


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

<>.find_all(name, attrs, recursive, string, **kwargs)
返回一个列表类型,存储查找的结果

1、name : 对标签名称的检索字符串

2、attrs: 对标签属性值的检索字符串,可标注属性检索

3、recursive: 是否对子孙全部检索,默认True

4、string: <>…</>中字符串区域的检索字符串

import requests
from bs4 import BeautifulSoup
response = requests.get("http://www.baidu.com")
demo = response.text
soup = BeautifulSoup(demo, 'html.parser')
print(soup.find_all('a'))
for tag in soup.find_all(True):
     print(tag.name)
for tag in soup.find_all(re.compile('a')):
    print(tag.name)

#attrs: 对标签属性值的检索字符串,可标注属性检索
# <a class="mnav" href="http://news.baidu.com" name="tj_trnews">新闻</a>
print(soup.find_all('a','mnav'))
print(soup.find_all(id = 'link'))
print(soup.find_all(id = re.compile('link')))
#recursive: 是否对子孙全部检索,默认True
print(soup.find_all('a', recursive=False))
#string: <>…</>中字符串区域的检索字符串
print(soup.find_all(string = '新闻'))
print(soup.find_all(string = re.compile('百度')))

扩展方法

方法说明
<>.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()参数
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值