一、实验目的
- 掌握如何使用Python获取网络和本地文本。
- 掌握如何使用NLTK包和正则表达式对获取的原始文本进行处理。
二、实验环境
Python 3
NLTK包
正则表达式
三、实验内容
1. 使用HTML解析的方式提取任意网页文本(英文),并查找文章第一自然段的内容。
(http://www.chinadaily.com.cn/a/202008/07/WS5f2cf95ca31083481725ef12.html)
import nltk, re, pprint from nltk import word_tokenize from nltk.data import PathPointer, ZipFilePathPointer, find
#从网页读取文字 from urllib.request import urlopen url = "http://www.gutenberg.org/files/1342/1342-0.txt" response = urlopen(url) raw = response.read().decode('utf8')
#根据内容定义开始与结尾 text1 = "The Project Gutenberg eBook of Pride and Prejudice, by Jane Austen" print (raw.find("The Project Gutenberg eBook of Pride and Prejudice, by Jane Austen"))#正向 #逆向 raw.rfind print (raw.rfind("The Project Gutenberg eBook of Pride and Prejudice, by Jane Austen")) print(len(text1))
1 1 66
# print(type(raw)) # len(raw) print(raw[1:66])
The Project Gutenberg eBook of Pride and Prejudice, by Jane Auste
#HTML下载 url = "http://www.chinadaily.com.cn/a/202008/07/WS5f2cf95ca31083481725ef12.html" html = urlopen(url).read().decode('utf8') html[:60]
'<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//E'
#HTML解析 from bs4 import BeautifulSoup raw = BeautifulSoup(html,'lxml').get_text() tokens = word_tokenize(raw) tokens
['Explore', 'Sichuan', 'panda', 'habitat', 'online', '-', 'Chinadaily.com.cn', 'Search', 'HOME', 'CHINA', 'WORLD', 'BUSINESS', 'LIFESTYLE', 'CULTURE', 'TRAVEL', 'WATCHTHIS', 'SPORTS', 'OPINION', 'REGIONAL', 'FORUM', 'NEWSPAPER', 'MOBILE', 'Home', 'Travel', 'City', 'Tours', 'Home', '/', 'Travel', '/', 'City', 'Tours', 'Explore', 'Sichuan', 'panda', 'habitat', 'online', 'Chinaculture.org', '|', 'Updated', ':', '2020-08-07', '14:48', 'Share', 'Share', '-', 'WeChat', 'CLOSE', 'An', 'online', 'exhibition', 'offers', 'a', 'tour', 'of', 'giant', 'pandas', 'and', 'their', 'natural', 'habitats', 'in', 'Southwest', 'China', "'s", 'Sichuan', 'province', '.', 'The', 'exhibition', 'was', 'launched', 'on', 'Aug', '5', ',', '2020', '.', '[', 'Photo', 'provided', 'to', 'Chinaculture.org', ']', 'The', 'online', 'exhibition', 'Wonderful', 'Exploration', '–', 'A', 'Journey', 'to', 'the', 'Habitat', 'of', 'Giant', 'Pandas', 'in', 'Sichuan', ',', 'co-sponsored', 'by', 'the', 'China', 'Cultural', 'Centre', 'in', 'Sydney', ',', 'the', 'Chinese', 'Tourism', 'Office', 'in', 'Sydney', 'and', 'the', 'Department', 'of', 'Culture', 'and', 'Tourism', 'of', 'Sichuan', 'province', ',', 'was', 'launched', 'Wednesday', 'on', 'the', 'official', 'website', 'of', 'the', 'China', 'Cultural', 'Centre', 'in', 'Sydney', '.', 'As', 'part', 'of', 'the', '2020', 'Sichuan', 'Panda', 'Culture', 'and', 'Tourism', 'Week', ',', 'it', 'presents', 'to', 'panda', 'lovers', 'in', 'Australia', 'a', 'tour', 'of', 'the', 'giant', 'panda', 'habitat', 'online', '.', 'Giant', 'panda', ',', 'a', 'symbol', 'of', 'friendliness', ',', 'is', 'a', '``', 'messenger', 'of', 'friendship', "''", 'and', '``', 'messenger', 'of', 'peace', "''", '.', 'These', 'fluffy', 'creatures', 'are', 'loved', 'by', 'people', 'all', 'over', 'the', 'world', '.', 'Sichuan', 'province', ',', 'located', 'in', 'Southwest', 'China', ',', 'is', 'home', 'to', 'the', 'giant', 'pandas', '.', 'It', 'has', 'seven', 'nature', 'reserves', 'and', 'nine', 'scenic', 'spots', ',', 'forming', 'the', 'world', "'s", 'largest', 'panda', 'habitat', 'tour', 'route', ',', 'covering', 'an', 'area', 'of', '9,245', 'square', 'kilometers', '.', '1', '2', '3', '4', '5', '6', '7', 'Next', '>', '>', '|', '1/7', 'Next', 'Photo', 'First', 'snow', 'of', 'season', 'hits', 'Beijing', 'Festive', 'China', ':', 'Winter', '6th', 'plenary', 'of', 'CPC', 'Central', 'Committee', ':', 'All', 'you', 'need', 'to', 'know', 'Execs', 'laud', 'Xi', "'s", 'keynote', 'remarks', 'at', '4th', 'CIIE', '(', 'V', ')', 'Saluting', 'China', "'s", 'unsung', 'space', 'heroes', 'China', 'issues', 'orange', 'alert', 'for', 'blizzards', 'Top', 'BACK', 'TO', 'THE', 'TOP', 'English', '中文', 'HOME', 'CHINA', 'WORLD', 'BUSINESS', 'LIFESTYLE', 'CULTURE', 'TRAVEL', 'WATCHTHIS', 'SPORTS', 'OPINION', 'REGIONAL', 'FORUM', 'NEWSPAPER', 'China', 'Daily', 'PDF', 'China', 'Daily', 'E-paper', 'MOBILE', 'Copyright', '1995', '-', '.', 'All', 'rights', 'reserved', '.', 'The', 'content', '(', 'including', 'but', 'not', 'limited', 'to', 'text', ',', 'photo', ',', 'multimedia', 'information', ',', 'etc', ')', 'published', 'in', 'this', 'site', 'belongs', 'to', 'China', 'Daily', 'Information', 'Co', '(', 'CDIC', ')', '.', 'Without', 'written', 'authorization', 'from', 'CDIC', ',', 'such', 'content', 'shall', 'not', 'be', 'republished', 'or', 'used', 'in', 'any', 'form', '.', 'Note', ':', 'Browsers', 'with', '1024', '*', '768', 'or', 'higher', 'resolution', 'are', 'suggested', 'for', 'this', 'site', '.', 'License', 'for', 'publishing', 'multimedia', 'online', '0108263', 'Registration', 'Number', ':', '130349', 'About', 'China', 'Daily', 'Advertise', 'on', 'Site', 'Contact', 'Us', 'Job', 'Offer', 'Expat', 'Employment', 'FOLLOW', 'US', 'Copyright', '1995', '-', '.', 'All', 'rights', 'reserved', '.', 'The', 'content', '(', 'including', 'but', 'not', 'limited', 'to', 'text', ',', 'photo', ',', 'multimedia', 'information', ',', 'etc', ')', 'published', 'in', 'this', 'site', 'belongs', 'to', 'China', 'Daily', 'Information', 'Co', '(', 'CDIC', ')', '.', 'Without', 'written', 'authorization', 'from', 'CDIC', ',', 'such', 'content', 'shall', 'not', 'be', 'republished', 'or', 'used', 'in', 'any', 'form', '.']
#查找内容定位--同上 print (raw.find("The online exhibition")) #第一自然段开头 #逆向 raw.rfind print (raw.find("As part of the 2020 Sichuan Panda")) #第二自然段开头 text = raw[743:1082] print (text) # text = nltk.Text(tokens) # print (text)
743 1082 The online exhibition Wonderful Exploration – A Journey to the Habitat of Giant Pandas in Sichuan, co-sponsored by the China Cultural Centre in Sydney, the Chinese Tourism Office in Sydney and the Department of Culture and Tourism of Sichuan province, was launched Wednesday on the official website of the China Cultural Centre in Sydney.
2. 将上题中提取的文本写入本地文本文件,再将文本文件中的内容读取出来,利用NLTK包中的函数对文本进行分句和分词处理。
将text格式转化为str
打开文件模式为写。
#w 只能操作写入 r 只能读取 a 向文件追加
#w+ 可读可写 r+可读可写 a+可读可追加
#wb+写入进制数据
#w模式打开文件,如果而文件中有数据,再次写入内容,会把原来的覆盖掉
f = open('D:\Desktop\document.txt',mode='w') # 提取的文本写入本地文本文件 # 2.1 write 写入 #\n 换行符 str1=str(text) f.write(str1)
339
分句
import nltk import nltk.data def splitSentence(paragraph): tokenizer = nltk.data.load('tokenizers/punkt/english.pickle') sentences = tokenizer.tokenize(paragraph) return sentences if __name__ == '__main__': test0 = open('D:/Desktop/document.txt').read() print (test0) test1=splitSentence(test0) print(test1)
The online exhibition Wonderful Exploration – A Journey to the Habitat of Giant Pandas in Sichuan.co-sponsored by the China Cultural Centre in Sydney.the Chinese Tourism Office in Sydney and the Department of Culture and Tourism of Sichuan province, was launched Wednesday on the official website of the China Cultural Centre in Sydney. ['The online exhibition Wonderful Exploration – A Journey to the Habitat of Giant Pandas in Sichuan.co-sponsored by the China Cultural Centre in Sydney.the Chinese Tourism Office in Sydney and the Department of Culture and Tourism of Sichuan province, was launched Wednesday on the official website of the China Cultural Centre in Sydney.']
效果不明显。原因:这一自然段一共只有一句。
分词。
from nltk.tokenize import WordPunctTokenizer def wordtokenizer(sentence): #分词 words = WordPunctTokenizer().tokenize(sentence) return words if __name__ == '__main__': test0 = open('D:/Desktop/document.txt').read() print (test0) test2=wordtokenizer(test0) print(test2)
The online exhibition Wonderful Exploration – A Journey to the Habitat of Giant Pandas in Sichuan.co-sponsored by the China Cultural Centre in Sydney.the Chinese Tourism Office in Sydney and the Department of Culture and Tourism of Sichuan province, was launched Wednesday on the official website of the China Cultural Centre in Sydney. ['The', 'online', 'exhibition', 'Wonderful', 'Exploration', '–', 'A', 'Journey', 'to', 'the', 'Habitat', 'of', 'Giant', 'Pandas', 'in', 'Sichuan', '.', 'co', '-', 'sponsored', 'by', 'the', 'China', 'Cultural', 'Centre', 'in', 'Sydney', '.', 'the', 'Chinese', 'Tourism', 'Office', 'in', 'Sydney', 'and', 'the', 'Department', 'of', 'Culture', 'and', 'Tourism', 'of', 'Sichuan', 'province', ',', 'was', 'launched', 'Wednesday', 'on', 'the', 'official', 'website', 'of', 'the', 'China', 'Cultural', 'Centre', 'in', 'Sydney', '.']
3. 将以上文本内容换成中文文本重复1,2题步骤,比较其中存在什么差异。
(https://column.chinadaily.com.cn/a/202111/07/WS6187b36ba3107be4979f6fd0.html)
https://column.chinadaily.com.cn/a/202111/07/WS6187b36ba3107be4979f6fd0.html
#中文HTML下载 url = "https://column.chinadaily.com.cn/a/202111/07/WS6187b36ba3107be4979f6fd0.html" html = urlopen(url).read().decode('utf8') html[:60] #HTML解析 from bs4 import BeautifulSoup raw = BeautifulSoup(html,'lxml').get_text() raw
'\n\n\n\n\n\n陈新光:加快构建新发展格局 为中国经济稳定恢复提供坚实支撑 - 中国日报网\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nChina Daily Homepage \n中国日报中文网\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n专栏首页\n\n\n文章\n\n专辑\xa0\xa0\xa0\n\n作家\n\n\n站长专栏\n\n\n\n\n\n热点评论\n财经\n文化娱乐\n科技\n运动\n生活方式\n国际观察\n地理旅游\n诗歌散文\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nChina Daily Homepage\n中文网首页\n时政\n资讯\n财经\n生活\n视频\n专栏\n双语\n漫画\n原创\n观天下\n\n\n\n\n\n\n\n\n文章\n\n\n专辑\n\n\n作家\n\n\n站长专栏\n\n\n\n\n\n\n\n\n\n陈新光\xa0\xa0>>\xa0\xa0正文\n \n\n\n陈新光:加快构建新发展格局 为中国经济稳定恢复提供坚实支撑\n\n陈新光\n2021年11月07日\n\n\n\n\n\n\n\n\n\n\n近年来,我国创新发展势头良好,为经济发展注入了强大动力。从最新发布的多项指标反映,主要宏观指标仍处于合理区间,特别是就业得以改善,居民收入提高较快,结构调整稳步推进,质量效益持续提升。面对国际疫情蔓延、极端天气等冲击,展示了强劲的增长韧性,对经济增长起到了重要的支撑作用。\n中国经济“基础大盘”依然稳固\n在多重风险挑战下,中国经济“稳”的特征依然鲜明,并且亮点突出。“经济增长、就业、物价、国际收支”四大宏观经济指标显示,中国经济“基础大盘”依然稳固。前三季度经济仍在合理区间运行;全国城镇新增就业1045万人,完成全年目标95%;全国居民消费价格同比上涨0.6%,物价总水平低位平稳;进出口和利用外资依然保持高位增长,外汇储备已连续5个月保持在3.2万亿美元以上。\n中国经济“基础大盘”依然稳固主要体现在:一是生产形势稳中向好,创新动能不断增强。秋粮增产已成定局,全年粮食产量有望再创历史新高;前三季度,高技术制造业的生产和投资两年平均增长均为两位数;新能源汽车、工业机器人、集成电路产量同比分别增长172.5%、57.8%、43.1%;二是企业利润稳步增长,经济效益不断提升。前8个月,规模以上工业企业利润同比增长49.5%,比2019年同期增长42.9%;前三季度,财政收入恢复性增长态势总体平稳,全国一般公共预算收入同比增长16.3%;扣除价格因素影响,全国居民人均可支配收入实际增长9.7%,与GDP增长基本同步;三是压力面前,信心比黄金更珍贵。中国是具有强劲韧性的超大型经济体,这种韧性来自近1.5亿市场主体的竞争力,来自经济体系的完整性,来自超大规模的国内市场和亿万人民通过艰苦奋斗实现美好生活的不懈追求。目前,国际机构普遍预测中国经济今年仍能实现8%左右的经济增长,这表明中国经济短期不会出现“硬着陆”。\n加强精准宏观调控,加快构建新发展格局\n在经济持续向好的同时,也有不确定性因素,对于一些中长期面临的结构性问题,特别是对风险控制问题,进行主动出击并稳步化解。中国有足够的政策空间,协调运用各项政策工具加以化解,确保经济运行在合理区间。做到创新驱动要持续增强,放管服改革要不断深化,供给侧结构性改革要稳步推进,从中保持我国创新发展势头良好,持续为经济发展注入强大动力,从而在复杂局面下,很好地实现稳增长和调结构的动态平衡。当下,要强化科技创新和产业链供应链韧性,加强基础研究,推动应用研究,开展补链强链专项行动,实施产业基础再造工程,加快解决“卡脖子”难题,加快制造业数字化转型,发展“专精特新”中小企业,在补链强链行动上不断发力。\n对于经济下行压力,我们要仔细梳理背后的原因,坚定必胜信心。当下值得注意的是,增强产业链供应链自主可控能力,并不意味着走向封闭和内顾,而是推进更高水平开放,在开放合作中锻造更强大综合竞争力。为此,要深化要素市场化改革,充分调动生产要素活力和红利,进一步增强我国的超大规模市场优势;加大对区域和全球的分散化布局,形成多维立体的产业链和供应链体系;推出更多扩大开放举措,打造更优的营商环境,只有这样中国才能在全球供应链重构中占据更有利位置。可以说,中国在“十四五”期间有充足的发展、充分的政策空间,能够展现足够的韧性和巨大的潜力。我们要紧紧把握中国经济长期向好的大趋势,扎实推进各项工作,加快构建新发展格局,实施好宏观政策跨周期调节,为中国经济稳定恢复提供坚实支撑。\n我国持续引领了世界经济复苏\n必须看到部分国家逆全球化而动,叠加全球遭遇新冠肺炎疫情冲击,对全球产业链稳定和供应链畅通带来空前挑战。当下的“芯片荒”,正是其中典型,从手机、电视、电脑、汽车等行业,到5G、人工智能、物联网、自动驾驶领域,很多都受“工业粮食”芯片短缺的困扰,使得越来越多的国家开始考虑兼顾生产效率和产业安全,全球供应链调整加速。在疫情冲击下,中国供应链表现出了强大韧性,但同时也暴露出一系列问题,在聚焦产业链供应链断点堵点,提升稳定性和竞争力上,格外显得重要而紧迫。\n从国际角度来看,全球疫情走势和经济走势趋于复杂,一些新情况和老问题交织叠加,风险挑战依然不减。三季度以来,世界主要经济体在德尔塔病毒侵袭、全球供应链循环遇阻等一系列冲击下,经济增速出现同步放缓。国际货币基金组织10月份发布最新一期《世界经济展望报告》,下调全球经济增速0.1个百分点到5.9%。在世界经济复苏受阻的情况下,我国能够取得前三季度国内生产总值同比增长9.8%、两年平均增速5.2%的成绩,我国持续引领了世界经济复苏,显得非常亮眼。世界各大外媒一片赞叹,并对中国经济在新的一年继续引领世界经济复苏充满期待。\n全球化智库(CCG)特邀研究员\n上海大学经济学院 兼职教授 陈新光\n2021年11月5日\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n陈新光\n中国社会科学院-上海市人民政府上海研究院研究员、上海市统计学会副会长、全球化智库(CCG)特邀研究员。\n\n\n\n\n\n\n\n\n\n\n专栏首页\n\n\n文章\n\n\n作家\n\n\n\n友情链接:\n中国日报网\n新华网\n人民网\n中国网\n\n\n关于我们 \n|\n 联系我们\n\n\n\n\n\n\n\n互联网举报中心\n 防范网络诈骗 \n 法律顾问:炜衡律师\n 视听节目许可证0108263京公网安备110105000081号京网文[2011]0283-097号\n\n\n\n\n\n首页\n时政\n资讯\n财经\n文化\n图片\n视频\n双语\n\n\n中文 | English\n\n\n 中国日报版权所有Content@chinadaily.com.cn\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n'
#查找内容定位--同上 print (raw.find("近年来,我国创新发展势头良好")) #第一自然段开头 #逆向 raw.rfind print (raw.find("中国经济“基础大盘”依然稳固")) #第二自然段开头 text1 = raw[404:541] print (text1) # text = nltk.Text(tokens) # print (text)
404 541 近年来,我国创新发展势头良好,为经济发展注入了强大动力。从最新发布的多项指标反映,主要宏观指标仍处于合理区间,特别是就业得以改善,居民收入提高较快,结构调整稳步推进,质量效益持续提升。面对国际疫情蔓延、极端天气等冲击,展示了强劲的增长韧性,对经济增长起到了重要的支撑作用。
f1 = open('D:\Desktop\document2.txt',mode='w') # 提取的文本写入本地文本文件 # 2.1 write 写入 #\n 换行符 str1=str(text1) f1.write(str1)
137
import nltk import nltk.data def splitSentence(paragraph): tokenizer = nltk.data.load('tokenizers/punkt/english.pickle') sentences = tokenizer.tokenize(paragraph) return sentences if __name__ == '__main__': test = open('D:/Desktop/document2.txt').read() print (test) test2=splitSentence(test) print(test2)
近年来,我国创新发展势头良好,为经济发展注入了强大动力。从最新发布的多项指标反映,主要宏观指标仍处于合理区间,特别是就业得以改善,居民收入提高较快,结构调整稳步推进,质量效益持续提升。面对国际疫情蔓延、极端天气等冲击,展示了强劲的增长韧性,对经济增长起到了重要的支撑作用。 ['近年来,我国创新发展势头良好,为经济发展注入了强大动力。从最新发布的多项指标反映,主要宏观指标仍处于合理区间,特别是就业得以改善,居民收入提高较快,结构调整稳步推进,质量效益持续提升。面对国际疫情蔓延、极端天气等冲击,展示了强劲的增长韧性,对经济增长起到了重要的支撑作用。']
from nltk.tokenize import WordPunctTokenizer def wordtokenizer(sentence): #分词 words = WordPunctTokenizer().tokenize(sentence) return words if __name__ == '__main__': test = open('D:/Desktop/document2.txt').read() print (test) test2=wordtokenizer(test) print(test2)
近年来,我国创新发展势头良好,为经济发展注入了强大动力。从最新发布的多项指标反映,主要宏观指标仍处于合理区间,特别是就业得以改善,居民收入提高较快,结构调整稳步推进,质量效益持续提升。面对国际疫情蔓延、极端天气等冲击,展示了强劲的增长韧性,对经济增长起到了重要的支撑作用。 ['近年来', ',', '我国创新发展势头良好', ',', '为经济发展注入了强大动力', '。', '从最新发布的多项指标反映', ',', '主要宏观指标仍处于合理区间', ',', '特别是就业得以改善', ',', '居民收入提高较快', ',', '结构调整稳步推进', ',', '质量效益持续提升', '。', '面对国际疫情蔓延', '、', '极端天气等冲击', ',', '展示了强劲的增长韧性', ',', '对经济增长起到了重要的支撑作用', '。']
nltk 处理中文是完全可用的,其重点在于中文分词和文本表达的形式。
中文句点会被分离开。
但中文和英文主要的不同之处是中文需要分词,因为nltk 的处理粒度一般是词,所以必须要先对文本进行分词然后再用nltk 来处理(不需要用nltk 来做分词,直接用分词包就可以了)中文分词之后,文本就是一个由每个词组成的长数组:[word1, word2, word3…… wordn]。之后就可以使用nltk 里面的各种方法来处理这个文本了。比如用FreqDist 统计文本词频,用bigrams 把文本变成双词组的形式:[(word1, word2), (word2, word3), (word3, word4)……(wordn-1, wordn)]。
4. 说明以下正则表达式的含义
(1)[a-zA-Z]+
s = 'abedFASK1111' regex = re.compile("[a-zA-Z]+") print(regex.findall(s))
['abedFASK']
小写字母后,接大写字母。
(2)[A-Z][a-z]
s = 'AbedFASK1111' regex = re.compile("[A-Z][a-z]") print(regex.findall(s))
['Ab']
1个大写字母后,接1个小写字母。
(3)p[aeiou]{,2}t
s = 'pbtpatpaitpaiet' # 方括号符号 '[oum]' ——匹配方括号中的任意一个 # t[aeio]n只匹配tan,Ten,tin和toN等 regex = re.compile("p[aeiou]{,2}t") print(regex.findall(s))
['pat', 'pait']
P+{a,e,I,o,u}中的1~2个字母+t,即p开始,t结尾,中间为最多两个元音组成的单词。
(4)r’1+$$’
s = '123aaa123456$' s1 = '123456$' # ^代表以xxx开头的行,$代表以xxxe结尾的行 regex = re.compile(r'^[0-9]+\$$') print(regex.findall(s),regex.findall(s1))
[] ['123456$']
^是匹配字符串开始,[0-9]是[0-9]范围里匹配一次以上, $是匹配结束符
(5) [aeiou][aeiou][aeiou]
s = 'aec111' # 匹配的第一个字母只能是小写的aeiou任意一个,第二个字母可以是aeiou中的任意一个。第三个字母是不能是小写的aeiou中的任意一个 regex = re.compile(r'^[aeiou][aeiou][^aeiou]') print(regex.findall(s))
['aec']
匹配的第一个字母只能是小写的aeiou任意一个,第二个字母可以是aeiou中的任意一个,第三个字母是不能是小写的aeiou中的任意一个。
5. 使用切片方法删除词汇形态上的结尾。
例如: ‘dogs’[:-1]删除了 dogs的最后一个字符,留下
dog。使用切片符号删除下面这些词的词缀(在这里插入了一个连字符“-”指示词缀的边界, 请在你的字符串中省略掉连字符): dishes,
running, nationality, undo, preheat (dish-es, run-ning, nation-ality,
un-do, pre-heat)。
'dishes'[:-2]
'dish'
'running'[:-4]
'run'
'nationality'[:-5]
'nation'
'undo'[:-2]
'un'
'preheat'[:-4]
'pre'
6.自定义一段有词形变化的字符串利用词干提取器PorterStemmer和LancasterStemmer分别进行处理并进行简单的比较。
词形还原(lemmatization)是把一个词汇还原为一般形式(能表达完整语义),方法较为复杂;基于字典的映射。nltk中要求手动注明词性,否则可能会有问题。因此一般先要分词、词性标注,再词性还原。
# 基于Porter词干提取算法 from nltk.stem.porter import PorterStemmer porter_stemmer = PorterStemmer() s='maximum leaves' porter_stemmer.stem(s)
'maximum leav'
词干提取(stemming)是抽取词的词干或词根形式(不一定能够表达完整语义),方法较为简单。基于语言的规则,如英语中名词变复数形式规则。由于基于规则,可能出现规则外的情况。
# 基于Lancaster 词干提取算法 from nltk.stem.lancaster import LancasterStemmer lancaster_stemmer = LancasterStemmer() s='maximum leaves' lancaster_stemmer.stem(s)
'maximum leaves'
# 基于Snowball 词干提取算法 from nltk.stem import SnowballStemmer snowball_stemmer = SnowballStemmer('english') s='maximum leaves' snowball_stemmer.stem(s)
'maximum leav'
#从nltk库中导入需要的类,并且进行实例化 from nltk.stem import WordNetLemmatizer wnl = WordNetLemmatizer() #分别定义需要进行还原的单词与相对应的词性 words = ['cars','men','running','ate','saddest','fancier'] pos_tags = ['n','n','v','v','a','a'] for i in range(len(words)): print(words[i]+'--'+pos_tags[i]+'-->'+wnl.lemmatize(words[i],pos_tags[i]))
cars--n-->car men--n-->men running--v-->run ate--v-->eat saddest--a-->sad fancier--a-->fancy
- 0-9 ↩︎