python的基本文本处理操作
基本文本的处理
- 基本文本的处理
- 语料库
- nltk的基本语料库函数
- nltk语料库的导入
- 文本的词汇多样性
- 词频统计
- utf8和unicode的python实现
- python读取本地文件
- 练习
- 正则表达式及其应用
- 正则表达式模块
- 基本元字符
- 正则表达式在NLP中的应用
- 捕获与提取词干
- nltk词干提取器
- 词形归并
- 使用re分词
- re库的使用举例
- 练习
基本文本的处理
语料库
nltk的基本语料库函数
nltk语料库的导入
from nltk.book import *
from nltk.corpus import gutenberg
文本的词汇多样性
在计算文本长度时,按照词次数(token_number)计数。即,len(text)。
定义函数lexcical_diversity(),计算文本的词汇多样性。即词次数(token_number)/词数(type_number)。
def lexcical_diversity(text):return len(text) / len(set(text))
词频统计
# 导入语料库
from nltk.book import *
# 导入词频
from nltk.probability import FreqDist# 生成词频的词典
fd1 = FreqDist(text1)
# 生成前50词的 (词形, 词频) 的列表
mw1 = fd1.most_common(50)
# 绘制前100词的词频累计图
fd1.plot(100, cumulative = True)
# 绘制词分布图
text8.dispersion_plot(['crazy', 'love'])
utf8和unicode的python实现
# 导入库
import codecs#unicode 编码解码
codecs.unicode_escape_encode(ch)
codecs.unicode_escape_decode(ch)
#utf-8 编码解码
codecs.utf_8_encode(ch)
codecs.utf_8_decode(ch)
python读取本地文件
# 打开文件,注意文件路径
f = open('license.txt')
# 读入一行
raw = f.read()
练习
制作《理智与情感》(text2)中四个主角:Elinor,Marianne,Edward和Willoughby的分布图
text2.dispersion_plot(['Elinor', 'Marianne', 'Edward', 'Willoughby'])
计算两个数的最小公倍数
# 计算两个数的最小公倍数 def Least_common_multiple(a, b):for i in range(2, min(a, b)):if a % i == 0 and b % i == 0:a /= ib /= ireturn a * b
切片表达式提取text2 中最后一个、两个词
last1 = text2[-2:-1] last2 = text2[-3:-1]
使用for 和if 语句组合循环遍历《巨蟒和圣杯》(text6)的电影剧本中的词。输出所有的大写词作为一个列表。
lis = [word for word in text6 if word.isupper()]
找出聊天语料库(text5)中所有四个字母的词。使用频率分布函数(FreqDist),以频率从高到低显示这些词。
lis = [word for word in text5 if len(word) == 4] FreqDist(lis).plot(100) # FreqDist库不适用,则导入plt库 import matplotlib.pyplot as plt fq = [s for (w, s) in FreqDist(lis).most_common(50)] plt.plot(fq) plt.show()
写表达式找出text6 中所有符合下列条件的词。要求结果是词链表的形式:[‘word1’, ‘word2’, …]。
a. 以ize 结尾
b. 包含字母z
c. 包含字母序列pt
d. 除了首字母外是全部小写字母的词(即titlecase)s1=[w for w in text6 if w.endswith('ize')] s2=[w for w in text6 if 'z' in w] s3=[w for w in text6 if 'pt' in w] s4=[w for w in text6 if w.istitle()]
定义sent 为词链表[‘she’, ‘sells’, ‘sea’, ‘shells’, ‘by’, ‘the’, ‘sea’, ‘shore’]。编写代码执行以下任务:
a. 输出所有sh 开头的单词
b. 输出所有长度超过4 个字符的词s5=[w for w in sent if w.startswith('sh')] s6=[w for w in sent if len(w)>4]
定义函数vocab_size(text),返回文本的词汇量。
def vocab_size(text):return len(set(lis))
定义函数percent(word, text),计算一个给定的词在文本中出现的频率。结果以百分比表示。
def percent(word, text):cnt = sum([1 for w in text if word == w])return cnt / len(text) * 100
计算文本的平均词长
def avgWordLen(text):return sum([len(w) for w in text]) / len(text)
正则表达式及其应用
正则表达式由两部分组成:
- 特殊字符/元字符–meta_characters
- 其他字符–literal
正则表达式模块
导入模块
import re
正则表达式匹配的函数调用:
re.search(pattern, string)
返回匹配对象,只返回第一个找到的匹配子串。re.search(pattern, string).group()
获取匹配子串。re.findall(pattern, string)
返回所有被匹配模式的列表。
基本元字符
已有wordlist,如下:
import nltk
# 'en' 表示english,指英文词汇
# 在words.words()中用'en',在stopwords.words()中用'english'
wordlist = [w for w in nltk.corpus.words.words('en') if w.islower()]
$ 匹配结尾
例:列出wordlist中全部以ed结尾的词[w for w in wordlist if re.search('ed$'. w)]
^ 匹配开始
例:列出以th开始的词[w for w in wordlist if re.search('^th', w)]
. 匹配所有单个字符
例:列出第二个字符是的词[w for w in wordlist if re.search('^.s', w)]
? 表示其前面的字符有1个或0个,即≤1
例:匹配email和e-mailre.search('^e-?mail', w)
+ 表示前面的字符有1个或多个,即≥1
例:可以用来匹配goo(o···oo)glere.search('^goo+gle', w)
* 表示前面的字符有0个或多个,即≥0
例:匹配任意个任意字符’.*’{m, n} 表示前面的字符至少出现m次,至多出现n次,即m≤字符出现字数≤n。特别地,{n}表示恰好出现n次,{, n}表示出现≤n次,{n, }表示出现≥n次
例:可以匹配到’sheet’,'sheep’等re.search('^she{2}', w)
[] 表示在其中字符中任选一个进行匹配
注意,匹配是按照字符串中字符出现的位置顺序进行的,并不是按照模式中的顺序。
例:匹配的返回内容’ce’re.search('[cer]', iceberg)
在[] 之中,当’^'作为第一个字符出现时,其含义为否定。即,[ ^ ]表示不与括号内字符之内的所有字符匹配。
例:匹配非元音字母开始的词re.search('^[^aeiouAEIOU]', w)
| 在左右中选择一个字符进行匹配,优先选择左边
例1:先匹配以th开头的,如果匹配不上,匹配以sh开头的re.search('^th|^sh', w)
例2:先匹配以th开头的,如果匹配不上,匹配以sh结尾的
re.search('^th|sh$', w)
() 限定操作符的作用范围
例1:匹配以sh开头的,如果匹配不上,匹配以th开头的re.search('^(th|sh)', w)
例2:匹配以sh开头的,如果匹配不上,匹配含有sh的
re.search('^th|sh', w)
\ 表示回复后面字符的原意
例:网址匹配re.search('^w{3}\.cuc\.edu', 'www.cuc.edu.cn')
注意:应避免正则表达式被python解释为一般字符串,它应被留给re解释器解释。因此,一般最好在正则表达式前加r,这样python就不会解释其中的特殊字符了。
例:在格式文本中的一行,’:‘之前是题目,’:'之后是内容。将题目和内容分开。
import re
from nltk.book import *str = '春晓:春眠不觉晓,处处闻啼鸟'result1 = re.search('(.*):', str)
# 结果:<re.Match object; span=(0, 3), match='春晓:'>
print(result1)
# 结果:春晓:
print(result1.group())
# 结果:春晓
print(result1.group(1))result2 = re.search(':(.*)', str)
# 结果:<re.Match object; span=(2, 14), match=':春眠不觉晓,处处闻啼鸟'>
print(result2)
# 结果::春眠不觉晓,处处闻啼鸟
print(result2.group())
# 结果:春眠不觉晓,处处闻啼鸟
print(result2.group(1))
正则表达式在NLP中的应用
捕获与提取词干
对比:
使用字符串方法,去掉词后缀只提取词干信息
def stem(word): for suffix in ['ing', 'ly', 'ed', 'ious', 'ies', 'ive', 'es', 's', 'ment']:if word.endswith(suffix):return word[:-len(suffix)] return word
基于re的词干提取器
# 结果:列表['ing'] re.findall(r'^.*(ing|ly|ed|ious|ies|ive|es|s|ment)$', 'processing')# 结果:<re.Match object; span=(0, 10), match='processing'> re.search(r'^.*(ing|ly|ed|ious|ies|ive|es|s|ment)$', 'processing') # findall函数返回一个列表,列表的第一个元素(也是唯一一个元素)即为其后缀。 def stem(w):w[:-len(re.findall(r'^.*(ing|ly|ed|ious|ies|ive|es|s|ment)$', w)[0])]
nltk词干提取器
nltk提供已有的词干提取器,以应对re或字符串不能够处理的不规则情况。
word = 'lying'poter = nltk.PorterStemmer()
# 结果:lie
print(poter.stem(word))lancaster = nltk.LancasterStemmer()
# 结果:lying
print(lancaster.stem(word))snowball = nltk.SnowballStemmer('english')
# 结果:lie
print(snowball.stem(word))
词形归并
恢复词的原型,是词义处理的第一步。它消除词的屈折变化。这个过程被称为“lemmatize”。
nltk有WordNet提供的lemmatize的工具。
wnl = nltk.WordNetLemmatizer()
# 结果:lying
print(wnl.lemmatize('lying'))
# 结果:foot
print(wnl.lemmatize('feet'))
使用re分词
re.split(pattern, string)函数,将string以pattern切分
re.split(r'', string)
re.split(r'\t\n', string)
# \W表示字符数字下划线以外的所有字符,+表示1个或多个
re.split(r'\W+', string)
re库的使用举例
查找词集中的元音连对:
[vs for w in wordlist for vs in re.findall(r'[aeiou]{2,}', w)]
压缩单词中的元音:
def compress(word):pieces = re.findall(regexp, word)return ''.join(pieces)
辅音元音对的条件分布,音位分布:
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()
练习
使用re查找百分数
re.search(r'^\d+(\.\d+)?%$', '12.34%')
使用正则表达式取出文本中非字母的词
re.findall(r'[^a-zA-Z]+', string)
python的基本文本处理操作相关推荐
- 【新星计划】 Python的txt文本操作-读、写
Python的txt文本操作-读.写 读取txt文本 python常用的读取文件函数有三种read().readline().readlines() 以读取上述txt为例,看一下三者的区别 read( ...
- python怎么重命名word文件,Python读取word文本操作详解
本文研究的主要问题时Python读取word文本操作,分享了相关概念和实现代码,具体如下. 一,docx模块 Python可以利用python-docx模块处理word文档,处理方式是面向对象的.也就 ...
- python读取word内容复制粘贴,Python读取word文本操作详解
本文研究的主要问题时Python读取word文本操作,分享了相关概念和实现代码,具体如下. 一,docx模块 Python可以利用python-docx模块处理word文档,处理方式是面向对象的.也就 ...
- 怎么用python读取csv文件、并且是读取行-使用python获取csv文本的某行或某列数据的实例...
站长用Python写了一个可以提取csv任一列的代码,欢迎使用.Github链接 csv是Comma-Separated Values的缩写,是用文本文件形式储存的表格数据,比如如下的表格: 就可以存 ...
- python csv读取-使用python获取csv文本的某行或某列数据的实例
站长用Python写了一个可以提取csv任一列的代码,欢迎使用.Github链接 csv是Comma-Separated Values的缩写,是用文本文件形式储存的表格数据,比如如下的表格: 就可以存 ...
- python语音在线编辑-Python如何实现文本转语音
准备 我测试使用的Python版本为2.7.10,如果你的版本是Python3.5的话,这里就不太适合了. 使用Speech API 原理 我们的想法是借助微软的语音接口,所以我们肯定是要进行调用 相 ...
- python电脑发音-Python如何实现文本转语音
准备 我测试使用的Python版本为2.7.10,如果你的版本是Python3.5的话,这里就不太适合了. 使用Speech API 原理 我们的想法是借助微软的语音接口,所以我们肯定是要进行调用 相 ...
- python简单发音-Python如何实现文本转语音
准备 我测试使用的Python版本为2.7.10,如果你的版本是Python3.5的话,这里就不太适合了. 使用Speech API 原理 我们的想法是借助微软的语音接口,所以我们肯定是要进行调用 相 ...
- Python之re模块 —— 正则表达式操作
Python之re模块 -- 正则表达式操作 转自:http://www.cnblogs.com/PythonHome/archive/2011/11/19/2255459.html 这个模块提供了与 ...
最新文章
- 一个简单自激振荡器电路分析
- visio 转 pdf 裁边 ——使用pdfcrop对PDF裁边
- 我的第一个项目(人力资源管理之报表管理)
- [\u4e00-\u9fa5] //匹配中文字符
- leetcode题解108-将有序数组转换为二叉排序树
- Libsvm Java
- SSH框架总结(框架分析+环境搭建+实例源码下载)
- 各浏览器的Hack写法【转】
- 相机标定原理介绍(一)
- 5.FlashFXP连接失败(连接已拒绝)及530 permission denied(以root用户连接已被客户端关闭)
- 环境化学试题及答案大全
- 任务一: SpringMVC基本应用
- 解读一个有趣的网站seo,论网站如何快速上词以及上量
- 电影《乌云背后的幸福线》观后感
- python中什么是参数_Python中**和*参数有什么用
- ctf_show_misc_wp
- 疑难杂症篇(十)--Catia软件出现“没有合适的许可证来实现xx的请求”解决方案
- Mysql安装与设置用户名、密码
- Nature子刊:清华研究团队盘点类脑计算芯片简史
- WEB结合WML图铃下载全功略