python自然语言处理第三章:处理原始文本

1.访问《罪与罚》的英文翻译:
 

from urllib import urlopen

url="http://www.gu tenberg.org/files/2554/2554.txt"

raw=urlopen(url).read()

type(raw)

进程read()将需要几秒来下载这本书。如果Internet代理Python无法正确检测出来,需要用下面的方式手动指定代理。
 

proxies={'http:'http://www.xomeproxy.com:3128'}

raw=urlopen(url,prxies=proxies).read()

2.分词。产生词汇和标点符号的链表。
 

tokens=nltk.word_tokensize(raw)

type(tokens) #list

3.find()方法和rfind()方法(反向索引)
 

raw.find("PART I")

raw.rfind("PART I")

4.从HTML中提取文本。
 

url="http://news.bbc.co.uk/2/hi/health/2284783.stm"

html=urlopen(url).read()

html[:60]

NLTK中的辅助函数nltk.clean_htm()将HTML字符串作为参数,返回原始文本。然后对原始文本进行分词。
 

raw=nltk.clean_html(html) #得到HTML原始文本

tokens=nltk.word_tokensize(raw) #分词,得到词汇链表

text=nltk.Text(tokens) #词汇链表->文本

5.在Universal Feed Parser第三方python库的帮助下,访问博客内容。
 

>>>import feedparser

>>>llog=feedparser.parser("http://languagelog.ldc.upeenn.edu/nll/?feed=atom")

>>>llog=['feed']['title']

u 'Language Log'

>>>len(llog.entries)

15

>>>post=llog.entries[2]

>>>post.title

u"He's My BF"

>>>content=post.content[0].value

>>>nltk.word_tokensize(nltk.clean_html(content))

>>>nltk.word_tokensize(nltk.clean(html(llog.entires[2].content[0].value))

6.读取本地文件,读取文件时要检查目录是否为当前目录,不是则需要切换到目标目录。
 

f=open('document.txt') #open()函数的第二个参数表示打开方式,默认为‘rU’ r表示只读,U表示通用

raw=f.read() #创建包含整个文本的字符串

方法二:

for line in f:

print line.strip() #删除结尾的换行符

7.在python中检查当前目录。
import os
os.listddir('.')
8.使用nltk.data.find()来获取语料库中项目的文件名,然后打开读取它。
 

path=nltk.data.find('corpora/gutenberg/melville-moby_dict.txt')

raw=open(path,'rU').read()

9.for循环遍历字符串中的字符(for循环遍历字符串时只能得到单个字符,遍历链表可以得到词汇)。
 

>>>sent='colorless green ideas sleep furiously'

>>>for char in sent:r

>>> print char,

c o l o r l e s s g r e e n i d e a s s l e e p f u r i o u s l y

#计数单个字符

>>>from nltk.corpus import gutenberg

>>>raw=gutenberg.raw('melville-moby_dict.txt')

>>>fdist=nltk.FreqDist(ch.lower() for ch in raw if ch.isalpha())

>>>fdist.keys()

['e','t','a',o','n'..........]

10.正则表达式P109
#查找以ed结尾的词 r表示原始字符串
>>>import re
>>>[w for w in wordlist if re.search('ed$',w)]
#通配符. ^匹配字符串的开始,$匹配字符串的结尾
>>>[w for w in wordlist if re.search('^..j..t..$',w)]
#?是可选字符
>>>e-?mile #匹配email 和e-mail ?0个或1个
>>>sum(l for w in text if re.search('^e-mail$''w)) #计数文本中这个词出现的总次数
#+表示一个或多个实例,*表示零个或多个实例 + and * 有时称为ieKleene闭包或者闭包
>>>[w for w in wordlist if re.search('^m+i+e+$',w)]
#^出现在方括号中第一个时表示非
>>>[^aeiouAEOIU] # 匹配非元音字母
#\ 转义 {} {3,5}重复3-5次,为前面的项目重复指定的次数 |或逻辑 ()表示操作符的范围

11.正则表达式应用
#re.findall()找出所有匹配的指定正则表达式
>>>word='sdgoinkwenfoif;dvd'
>>>re.findall(r'[aeiou'],word)

#找出两个或两个以上元音序列,并确定他们的相对频率
wdj=sorted(set(nltk.corpus.treebank.words()))
fd=nltk.FreqDist(vs for word in wsj
for vs in re.findall(r'[aeiou'],word))
fd.items()

 

#只匹配词首的元音,词尾的元音和词的辅音.然后把匹配的词连接起来

regexp=r'^[AEIOUaeiou]+|[AEIOUaeiou]+$[^AEIOUaeiou]'

def compress(word):

pieces=re.findall(regexp,word)

return ''.join(pieces)

english_udhr=nltk.corpus.udhr.words('Englis-Latin1')

print nltk.tokenwrap(compress(w) for w in english_udhr[:75])

 

#从罗托卡特语词汇中提取所有的辅音-元音序列。

rotokas_words=nltk.corpus.toolbox.words('rotokas.dic')

cvs=[cv for w in rotokas_words for cv in re.findall(r'[ptksvr][aeiou]',w)]

cfd=nltk.ConditionalFreqDist(cvs)

cfd.tabulate()

12.词干提取器
 

def stem(word):

regexp=r'^(.*?)(ing|ly|ed|ious|ies|ive|es|s|ment)?$'

stem,suffix=re.findall(regexp,word)[0]

return stem

tokens=nltk.word_tokenize(raw)

porter=nltk.PorterStemmer() #提取器1

lancaster=nltk.LancasterStemmer() #提取器2 just so so

[porter.stem(t) for t in tokens]

[lancaster.stem(t) for t in tokens

13.将结果写进文件。
 

output_file=open('output.txt','w')

words=set(nltk.corpus.genesis.words('english-kjv.txt')

for word in sorted(words):

output_file.write(word+"\n")

14.文本换行。
 

from textwrap import fill

format='%s(%d)'

pieces=[format % (word,len(word) ) for word in saying]

output=' . join(pieces)

wrapped=fill(output)

print wrapped

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值