raw.find("PART I")
raw.rfind("End of Project Gutenberg's Crime")
通过find和rfind标记文章的开始和末尾
将要处理的文本拷贝到python文件夹下后,
f=open("2008.txt")
raw=f.read()
words=raw.split()
len(words)
转化为单词
逐行显示文本,
f = open('2008.txt', 'rU')
for line in f:
print line.strip()
字符串操作总结:
s.find(t) 字符串s 中包含t 的第一个索引(没找到返回-1)
s.rfind(t) 字符串s 中包含t 的最后一个索引(没找到返回-1)
s.index(t) 与s.find(t)功能类似,但没找到时引起ValueError
s.rindex(t) 与s.rfind(t)功能类似,但没找到时引起ValueError
s.join(text) 连接字符串s 与text 中的词汇
s.split(t) 在所有找到t 的位置将s 分割成链表(默认为空白符)
s.splitlines() 将s 按行分割成字符串链表
s.lower() 将字符串s 小写
s.upper() 将字符串s 大写
s.titlecase() 将字符串s 首字母大写
s.strip() 返回一个没有首尾空白字符的s 的拷贝
s.replace(t, u) 用u 替换s 中的t
import re
为了使用正则表达式,导入re函数库
[w for w in words if re.search('ed$',w)]
在words中寻找以ed结尾的单词
^表示以XX开头
$表示以XX结尾
.通配符
sum(1 for w in words if re.search('computer', w))
统计单词出现的数量
[w for w in words if re.search('^[cm][mno][mnt][p][u][t][e][r]$',w)]
[XXX]用于选择3个字符中的一个
· 通配符,匹配所有字符
^abc 匹配以abc 开始的字符串
abc$ 匹配以abc 结尾的字符串
[abc] 匹配字符集合中的一个
[A-Z0-9] 匹配字符一个范围
ed|ing|s 匹配指定的一个字符串(析取)
* 前面的项目零个或多个,如a*, [a-z]* (也叫Kleene 闭包)
+ 前面的项目1 个或多个,如a+, [a-z]+
? 前面的项目零个或1 个(即:可选)如:a?, [a-z]?
{n} 重复n 次,n 为非负整数
{n,} 至少重复n 次
{,n} 重复不多于n 次
{m,n} 至少重复m 次不多于n 次
a(b|c)+ 括号表示操作符的范围
porter = nltk.PorterStemmer()
lancaster = nltk.LancasterStemmer()
[porter.stem(t) for t in words]
词干提取,但是实验后效果不好
wnl = nltk.WordNetLemmatizer()
[wnl.lemmatize(t) for t in words]
词形归并 很好用,处理复数转单数。
规范化文本
set(w.lower() for w in text)
转化为小写
re.split(r' ', raw)
用空格分词
re.split(r'[ \t\n]+', raw) 或者 re.split(r'\s+', raw)
用空格、\t \n等分词
re.split(r'\W+', raw)
把其他字符除去,单词单独分割出来
print re.findall(r"\w+(?:[-']\w+)*|'|[-.(]+|\S\w*", raw)
匹配引号字符让它们与它们包括的文字分开
我们可以使用set(tokens).difference(wordlist),通过比较分词结果与
一个词表,然后报告任何没有在词表出现的标识符,来评估一个分词器。
你可能想先将所有标记变成小写。
' '.join(silly)
把单词变成一个大的字符串
将结果写入文件
我们已经看到了如何读取文本文件(3.1 节)。将输出写入文件往往也很有用。下面的
代码打开可写文件output.txt,将程序的输出保存到文件。
>>> 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")
当我们将非文本数据写入文件时,我们必须先将它转换为字符串。正如我们前面所看到
的,可以使用格式化字符串来做这一转换。关闭文件之前,让我们把总词数写入我们的文件。
>>> len(words)
2789
>>> str(len(words))
'2789'
>>> output_file.write(str(len(words)) + "\n")
>>> output_file.close()