Python NLTK自然语言处理1-文本操作
一、下载查看预料
使用python NLTK包,安装什么的参考
https://blog.csdn.net/huyoo/article/details/12188573
注:将nltk_data文件夹放在python运行环境的根目录下,方便调用语料。
#下载要先调好语料的下载路径。
import nltk
nltk.download('gutenberg') ##下载语料 要下载到nltk_data文件夹下
提问1:找出gutenberg的 shakespeare-macbeth.txt语料中最长的一句话。
from nltk.corpus import gutenberg
macbeth_sentences = gutenberg.sents('shakespeare-macbeth.txt')
#lenl = [len(s) for s in macbeth_sentences]
longest_len = max([len(s) for s in macbeth_sentences])
item = [s for s in macbeth_sentences if len(s) == longest_len]
提问2: 找出分析brown布朗语料库中情态动词
##nltk.download('brown') 下载
brown.categories() ##布朗语料库种类
news_text = brown.words(categories = 'news') ##选择新闻类
fdist = nltk.FreqDist([w.lower() for w in news_text]) ##词频统计
modals = ['can', 'could', 'may', 'might', 'must','will'] ##情态动词
for m in modals:
print (m + ':', fdist[m],)
停用词的应用
定义一个函数,计算文本中没有在停用词列表中的词的比例
from nltk.corpus import stopwords
a = stopwords.words('english') #查看下english停用词库
def concont(text):
stopwords = nltk.corpus.stopwords.word('english')
content = [w for w in text if w.lower() not in stopwords]
return len(content) / len(text)
分析下names预料中尾字母和男女性别的关系
names = nltk.corpus.names
names.fileids() ##两个男女姓名文件
male_names = names.words('male.txt')
female_names = names.words('female.txt')
##尾字母在各自文件夹中出现的次数
cfd = nltk.ConditionalFreqDist( (fileid, name[-1])
for fileid in names.fileids()
for name in names.words(fileid)
cfd.plot()
正则表达式
这里使用words语料,下载语料同上
匹配查找以ed结尾的词汇
import re
wordlist = [w for w in nltk.corpus.words.words('en') if w.islower()]
resea_edend = [w for w in wordlist if re.search('ed$', w)]
匹配任何单个字符有一个8个字母组成的词, j是其第三个字母,t是其第六个字母。
rr = [w for w in wordlist if re.search('^..j..t..$', w)] ##“.”表示通配符
#^开头,$结尾,8个字母。
##+ 表示可以匹配多次 0.0085 0.05
te = [w for w in wsj if re.search('^[0-9]+\.[0-9]+$', w)]
##匹配出带有字母和$的组合
zu = [w for w in wsj if re.search('^[A-Z]+\$$', w)]
##匹配出‘数字-字母(3到5次)’样式 10-day
sz3 = [w for w in wsj if re.search('^[0-9]+-[a-z]{3,5}$', w)]
##匹配出以ed或者ing结尾的单词
edin = [w for w in wsj if re.search('(ed|ing)$', w)]
最后 re.split,join 常用方法格式如下
re.split(r'\W+', str) 以所有字母,数字,下划线以外的字符进行拆分。
silly = ['We', 'called', 'him', 'Tortoise']
' '.join(silly) ##we called him Tortoise