一,从网络和硬盘访问文本
1,电子书
>>> raw = requests.get('http://gutenberg.org/files/2554/2554-0.txt').content
>>> raw[:10]
b'\xef\xbb\xbfThe Pro'
>>> raw = raw.decode('utf-8')[1:]
>>> raw[:10]
'The Projec'
>>> tokens = nltk.word_tokenize(raw) #词条化
>>> tokens[:10]
['The', 'Project', 'Gutenberg', 'EBook', 'of', 'Crime', 'and', 'Punishment', ',', 'by']
>>> text = nltk.Text(tokens)
>>> text.collocations()
Katerina Ivanovna; Pyotr Petrovitch; Pulcheria Alexandrovna; Avdotya
Romanovna; Rodion Romanovitch; Marfa Petrovna; Sofya Semyonovna; old
woman; Project Gutenberg-tm; Porfiry Petrovitch; Amalia Ivanovna;
great deal; young man; Nikodim Fomitch; Ilya Petrovitch; Project
Gutenberg; Andrey Semyonovitch; Hay Market; Dmitri Prokofitch; Good
heavens
>>> text.concordance('love')
Displaying 25 of 75 matches:
with extraordinary demonstrations of love and honour . A few months later Dost
husband , an infantry officer , for love , and ran away with him from her fat
t of spirits , and yet this poignant love for his wife and children bewildered
inevitable silence . You know how I love you ; you are all we have to look to
well . Of course , there is no great love either on his side , or on hers , bu
...
>>>
只有将list类型的文本转换为NLTK文本,才可以使用第一章中介绍的各种功能函数如text.concordance()、text.collocations()等等。
2,处理HTML、处理RSS订阅、读取本地文件等
二,字符串:最底层的文本处理
字符串和链表的差异
字符串:
- 不可修改
- 粒度固定,只能为字符
- 易于存储到文件或输出到终端
链表:
- 可修改
- 元素粒度可变,元素可以是字符、单词、短语、句子、段落等,后续处理很灵活
三,使用Unicode进行文字处理
四,使用正则表达式检测词组匹配
主要使用re.search(regexp,w)来寻找匹配的词语。
对Python 解释器而言,一个正则表达式与任何其他字符串没有两样。如果字符串中包含一个反斜杠后面跟一些特殊字符,Python 解释器将会特殊处理它们。例如:“\b”会被解释为一个退格符号。一般情况下,当使用含有反斜杠的正则表达式时,我们应该告诉解释器一定不要解释字符串里面的符号,而仅仅是将它直接传递给re 库来处理。我们通过给字符串加一个前缀“r”来表明它是一个原始字符串。例如:原始字符串r’\band\b’包含两个“\b”符号会被re 库解释为匹配词的边界而不是解释为退格字符。如果你能逐渐习惯使用r’…’表示正则表达式——就像从现在开始我们将做的那样——你将会避免去想这些解释上的歧义。
五,正则表达式的有益应用
1,提取字符块
使用re.findall(regexp,w)来提取字符块。
2,查找词干
>>> def stem(word):
... regexp = r'^(.*?)(ing|ly|ed|ious|ies|ive|es|s|ment)?$' #原始正则表达式前加r,'*?'表示非贪婪版本的'*'。
... stem, suffix = re.findall(regexp, word)[0]
... return stem
...
>>> raw = """DENNIS: Listen, strange women lying in ponds distributing swords
... is no basis for