from urllib import urlopen
url="http://www.gu tenberg.org/files/2554/2554.txt"
raw=urlopen(url).read()
type(raw)
proxies={'http:'http://www.xomeproxy.com:3128'}
raw=urlopen(url,prxies=proxies).read()
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) #词汇链表->文本
>>>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() #删除结尾的换行符
import os
os.listddir('.')
8.使用nltk.data.find()来获取语料库中项目的文件名,然后打开读取它。
path=nltk.data.find('corpora/gutenberg/melville-moby_dict.txt')
raw=open(path,'rU').read()
>>>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表示原始字符串11.正则表达式应用
>>>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次,为前面的项目重复指定的次数 |或逻辑 ()表示操作符的范围
#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()
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")
from textwrap import fill
format='%s(%d)'
pieces=[format % (word,len(word) ) for word in saying]
output=' . join(pieces)
wrapped=fill(output)
print wrapped