Python自然语言处理第三章 - 处理原始文本

本文档介绍了Python自然语言处理中处理原始文本的方法,包括从网络和硬盘获取文本、字符串处理、Unicode、正则表达式的应用、文本规范化、正则表达式分词、句子分割和词形归并。重点讲解了如何使用正则表达式进行字符块提取、查找词干以及分词,并介绍了NLTK库的相关功能。
摘要由CSDN通过智能技术生成

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

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订阅、读取本地文件等

1
2

二,字符串:最底层的文本处理

3

字符串和链表的差异

字符串:

  • 不可修改
  • 粒度固定,只能为字符
  • 易于存储到文件或输出到终端

链表:

  • 可修改
  • 元素粒度可变,元素可以是字符、单词、短语、句子、段落等,后续处理很灵活

三,使用Unicode进行文字处理

4

四,使用正则表达式检测词组匹配

主要使用re.search(regexp,w)来寻找匹配的词语。

1
2

对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 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值