自然语言处理NLTK(二):文本处理

本文介绍了自然语言处理中的预处理步骤,包括使用BeautifulSoup库清理HTML以提取文本,以及使用正则表达式进行英文分词。示例展示了如何从天气网站抓取上海的温度信息,并给出了英文分词的详细例子。
摘要由CSDN通过智能技术生成
NLP流程

对于自然语言的处理,对问题的预处理可以用下图来表示,不管文本从哪里来本地或者网络,清理html,分词,取得vocab。

在这里插入图片描述

清理html

在原书中提供了一个nltk.clean_html()函数,但是这个函数已经过时了,现在我们会使用BeautifulSoup库来代替。

例如,课后习题第20题:编写代码来访问喜爱的网页,并从中提取一些文字。例如,访问一个天气网,提取你所在的城市的温度。现在我们以上海市为例,获取上海当天的温度情况。代码如下:

from bs4 import BeautifulSoup
from urllib.request import urlopen
 
def tem(http):
    htbyte=urlopen(http).read()    ###爬取网站
    html=htbyte.decode('utf-8')    
    soup=BeautifulSoup(html,'lxml')   ##使用BeautifulSoup
    ul=soup.find('ul',attrs={'class':'t clearfix'})  
    soup_tem=BeautifulSoup(str(ul),'lxml')
    tem=soup.find('p',attrs={'class':'tem'})
    text=tem.get_text()
    print('上海市今日温度:',text)
http=r'http://www.weather.com.cn/weather/101020100.shtml'  
tem(http)
分词

对于英文来说,分词通常指的是提取单词,比起中文分词来说较为容易。NLTK的正则表达式分词器

函数nltk.regexp_tokenize()和re.findall()类型,但是nltk.regexp_tokenize()分词效率更高,避免了括号的特殊处理的需要。为了增加可读性,将正则表达式分为几行写,每一行添加一个解释。(?x)‘Verbose’标志告诉Python去掉嵌入的注释和空格

>>> text = 'That U.S.A. poster-print costs $12.40...'
>>> pattern = r'''(?x)    # set flag to allow verbose regexps
...     ([A-Z]\.)+        # abbreviations, e.g. U.S.A.
...   | \w+(-\w+)*        # words with optional internal hyphens
...   | \$?\d+(\.\d+)?%?  # currency and percentages, e.g. $12.40, 82%
...   | \.\.\.            # ellipsis
...   | [][.,;"'?():-_`]  # these are separate tokens; includes ], [
... '''
>>> nltk.regexp_tokenize(text, pattern)
['That', 'U.S.A.', 'poster-print', 'costs', '$12.40', '...']

通过正则表达式可以对英文做非常多的处理,根据英文词性的关系,可以很方便的提取词干,

re.findall(r'^(.*?)(ing|ly|ed|ious|ies|ive|es|s|ment)$', 'processes')
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

go2coding

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值