《python自然语言处理》第三章 加工原料文本

该博客详细介绍了如何使用Python进行自然语言处理,包括访问网络和硬盘文本,处理HTML,读取本地文件,字符串处理,Unicode文字操作,正则表达式应用以及将处理后的文本写回文件。主要关注文本的获取、分割和格式化输出。
摘要由CSDN通过智能技术生成

主要解决三个问题:

1.访问本地或者网络上的文件

2.分割成单独的词和标点符号

3.产生格式化输出

from __future__ import division
import nltk, re, pprint

一、从网络和硬盘访问文本

from urllib.request import urlopen#python3与python2的库位置不同
url = r'http://www.gutenberg.org/files/24272/24272-0.txt'
raw = urlopen(url).read()
raw = raw.decode('utf-8')
len(raw)
分词

tokens = nltk.word_tokenize(raw)
type(tokens)
text=nltk.Text(tokens)
type(text)
raw.find("THE MOUNTAIN OF FEARS")
raw.rfind("our email newsletter to hear about new eBooks")
raw = raw[1005:309111]
raw.find("THE MOUNTAIN OF FEARS")
利用find 和rfind函数重新定位文本内容

二、处理的HTML

from bs4 import BeautifulSoup
url="http://news.bbc.co.uk/2/hi/health/2284783.stm"
html=urlopen(url).read()
raw = BeautifulSoup(html,'lxml').get_text()#从html中提取文本
tokens = nltk.word_tokenize(raw)
tokens = tokens[96:399]
text = nltk.Text(tokens)
text.concordance('gene')

三、读取本地文件

f=open('C:\\Users\\Yafang\\Desktop\\doc.txt')
print(f.read())
for line in f:
    print(line.strip())#strip()方法删除输入行结尾的换行符
捕获用户输入

s=input("Enter some text:")

四、字符串:最底层的文本处理

cirus = 'monty python\'s flying circus'#转义字符
couplet = "shall i compare"\
"thou are more"#斜杠表示还未输入完成
couplet = """you
are 
very 
good"""#三引号实现多行输入
from nltk.corpus import gutenberg
raw=gutenberg.raw('melville-moby_dick.txt')
fdist = nltk.FreqDist(ch.lower() for ch in raw if ch.isalpha())
#计数单个字符,过滤掉非字母字符
fdist.keys()

字符串不可变,链表可变
将文本翻译成unicode叫做解码,将unicode转化为其他编码叫做编码

五、使用unicode进行文字处理

1.codecs模块提供了将编码数据读入为unicode字符串和将unicode字符串编码形式写出的函数,codecs.open()函数有一个encoding参数来指定被读取或写入的文件的编码。
path = nltk.data.find('corpora/unicode_samples/polish-lat2.txt')
import codecs
f=codecs.open(path,encoding='latin2')
ord('a')#查找一个字符的整数序数
a=u'\u0061'
如果希望能够在一个python文件中使用自己的字符串输入及编辑的标准方法,需要在文件的第一行或第二行中包含字符串:

# -*- coding:<coding>-*-

六、使用正则表达式检测词组搭配

在python中使用正则表达式,需要使用re函数库,还需要用于搜索的词汇链表
import re
wordlist=[w for w in nltk.corpus.words.words('en') if w.islower()]
分词:
1、用空格分隔文本

raw = """when i'm a duchess, she said to herself,
(not in a very hopeful tone), i won't have any pepper in my kitchen"""
re.split(r' ',raw)
2、匹配任何数量的空格符、制表符、换行符
re.split(r'[ \t\n]+',raw)
re.split(r'\s+',raw)

七、写回文件

output_file = open('C:\\Users\\Yafang\\Desktop\\doc.txt','w')
words = set(nltk.corpus.genesis.words('english-kjv.txt'))
for word in sorted(words):
    output_file.write(word + "\n")













评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值