1、项目2初识文本基础处理自动提取文本关键词1实训目标(1) 掌握读取文档的方法。(2) 掌握自定义StoP_WOrdS函数获取停用词列表,自定义Filter_word函数处理文档的方法。(3) 掌握使用TF-IDF算法对关键词进行提取的方法。2实训环境环境版本说明Windows1064电脑操作系统Python3.8.5Python语言版本pandas1.3.0主要用于数据读取、清洗等操作NumPy1.21.6主要用于Python中的数值计算jieba0.42.1主要用于文本分词Gensim4.2.0主要用于检索文本、计算文本相似度、训练词向量、建模主题等MatpIotlib3.3.0主要用于数据
2、可视化PaddlePaddle2.4.2是一个深度学习框架,提供了高效的计算框架和优化算法PaddlcSpeech1.2.0主要用于语音和音频中的各种关键任务的开发scikit-learn1.0.2广泛地用于统计分析和机器学习建模等数据科学领域Librosa0.8.1主要用于分析一般的音频信号,是一个非常强大的Python语音信号处理的第三方库NLTK3.5是一个常用的自然语言处理工具包,可用于文本处理、语义分析、词性标注等SciPy1.7.3是一个科学计算工具包,可用于数学、科学、工程学等领域pyttsx32.9.0主要用于将文本转换成语音3实训说明自动提取文本关键词任务是指通过计算机自动化
3、地从一篇或多篇文本中提取出最具代表性、最能反映文本主题的关键词或短语。本任务根据TF-IDF算法原理自定义一个TF-IDF算法函数,并通过实例介绍关键词自动提取。关键词提取流程主要包括读取文档、文本预处理和TF-IDF实现等步骤,如图2-1所示。读取文档加载停用词文件文本预处理过滤停用词计算TF-IDF值TF-IDF实现通过函数实现关键词提取图2-1提取文本关键词具体步骤4实训步骤4.1 读取文档本任务以嫦娥五号的相关新闻为例,进行文档读取。读取文档,如代码2-1所示。代码2-1读取文档defread_txt_file(file_path):”读取txt文件,返回文件内容”withopen(f
4、ile_path,r,encoding-utf-8)asf:#file_path:文件路径content=f.read()returncontentfile_path=,.datainput.txtcontent=read_txt_file(file_path)print(content)运行读取文档代码,得到的文档内容如下。嫦娥五号实现我国首次地外天体起飞科技日报北京12月3日电(李晨记者付毅飞)记者从国家航天局获悉,12月3日23时10分,嫦娥五号上升器3000牛发动机工作约6分钟,成功将携带样品的上升器送入到预定环月轨道。这是我国首次实现地外天体起飞。与地面起飞不同,嫦娥五号上升器月面起
5、飞不具备成熟的发射塔架系统,着陆器相当于上升器的“临时塔架”,上升器起飞存在起飞初始基准与起飞平台姿态不确定、发动机羽流导流空间受限、地月环境差异等问题。另外由于月球上没有导航星座,上升器起飞后,需在地面测控辅助下,借助自身携带的特殊敏感器实现自主定位、定姿。点火起飞前,着上组合体实现月面国旗展开以及上升器、着陆器的解锁分离。此次国旗展开是我国在月球表面首次实现国旗的“独立展示”。点火起飞后,上升器经历垂直上升、姿态调整和轨道射入三个阶段,进入预定环月飞行轨道。随后,上升器将与环月等待的轨返组合体交会对接,将月球样品转移到返回器,后者将等待合适的月地入射窗口,做好返回地球的准备。4.2 文本预
6、处理读入需要提取关键字的文档之后,需要进行预处理。文本预处理包括加载停用词、对当前文档进行分词和词性标注,以及过滤一些对提取关键词帮助不大的词。在本步骤中,只将名词作为候选关键词,在过滤词中只留下名词,并且删除长度小于或等于1的无意义词语。文本预处理的具体步骤如图2-2所示。获取停用词列表过漉停用词图2-2文本预处理具体步骤1 .获取停用词列表加载停用词文件stopword.txt并按行读取文件中的停用词,对文本中多余的换行符进行替换,最终获取停用词列表。其中,自定义StOP_WordS函数用于获取停用词列表。加载停用词文件stopword.txt,如代码2-2所示。代码2-2加载停用词文件s
7、topword.txtdefStop_words():# 创建一个空列表,用于存储停用词stopword=data=# 打开停用词文件f=open(,.datastopword.txt,)# 逐行读取文件中的内容forlineinf.readlines():#去除行末的换行符,并将处理后的字符串添加到dala列表中data.append(line.strip()#将data列表中的字符串添加到StOPWord列表中foriindata:#去除字符串末尾的换行符,并将处理后的字符串添加到StOPWord列表中output=i.replace(n,)stopword.append(output)#
8、返回停用词列表returnstopword#调用Stop_words函数,并输出停用词列表PrintC停用词列表(前5个):n,Stop_words()0:5)运行加载停用词文件代码,得到停用词列表的前5个元素如下,主要包括标点符号。停用词列表(前5个):rufeff2.过滤停用词对当前文档过滤停用词。自定义FilteJWord函数用于对当前文档进行处理,输入参数为当前文档内容。处理后的文档存放在filter_word变量中,它是一个包含多个字符串的列表。过滤停用词如代码2-3所示。代码2-3过滤停用词#采用jieba进行词性标注,对当前文档过滤词和停用词importjieba.possegd
9、efFilter_word(text):original_words=#原始词列表filter_word=#过滤后的词列表stopword=Stop_words()#获取停用词列表text=jieba.posseg.cut(text)#使用jieba词性标注对文本进行分词forword,flagintext:#遍历文档中的每一个词及其词性original_words.append(word)#将词添加到原始词列表中ifflag.startswith(n)isFalse:#如果当前词性不是名词,跳过该词continueifnotwordinstopwordandlen(word)l:#如果当前词
10、不在停用词列表中且长度大于1,那么将其添加到过滤后的词列表中filter_word.append(word)returnoriginal_words,filter_word#返回原始词列表和过滤后的词列表OriginaLwords,filter-word=Filter_word(content)#调用Filter_word函数处理文本Print(过滤前的词列表:,OriginaLWOrdS0:10)#打印过滤前的词列表前10个词Print(过滤后的词列表:,filter_word0:10)#打印过滤后的词列表前10个词运行过滤停用词代码,得到过滤前词列表的前十个词和过滤后词列表的前十个词如下。
11、过滤前的词列表:1嫦娥五号实现我国首次地外天体起飞科技日报北京过滤后的词列表:r嫦娥天体,科技日报北京李晨记者付毅飞记者国家航天局嫦娥在过滤前的词列表中,包含了文本中出现的前10个词,如:“嫦娥”“五号”“实现”“我国”等。过滤前的词列表中既包括名词,也包括其他词性的词。经过过滤后的词列表只保留了名词且不在停用词列表中的词,如:“嫦娥”“天体科技日报”“北京”等。4.3TF-IDF实现最后使用TF-IDF算法对关键词进行提取。在自定义的tfjdf函数中,算法实现分为以下3个步骤。 调用自定义的Filter.word函数处理当前文档,统计每个词的TF值。 调用自定义的FiltejWOrdS函数处
12、理整个文档集,统计IDF值。 将TF值和IDF值相乘,得到每个词的TF-IDF值。通过自定义的tfjdf函数能够实现对文档中关键词的提取。提取文档关键词如代码2-4所示。通过实现TF-IDF算法,分别计算文档中每个词的TF值和IDF值,将二者相乘得到TF-IDF值,然后按照TF-IDF值从高到低排序,提取前10个关键词。代码2-4提取文档关键词importmathimportoperator#加载文档集,对文档集过滤词和停用词defFilter_words(data_path=./data/CorPUS.txt):document=forlineinopen(data_path,r,encod
13、ing-utfB):segment=jieba.posseg.cut(line.strip()filter_words=stopword=Stop_words()forword,flaginsegment:ifflag.startswith(n,)isFalse:continueifnotwordinstopwordandlen(word)1:filter_words.append(word)document.append(filter_words)returndocumentdeftfjdf。:# 统计TF值,即每个词在文本中出现的频率tf_dict=Joriginal_words,filt
14、er_word=Filter-word(content)#通过FilteJWOrd函数去除停用词等无用词汇,返回文本中的单词列表forwordinfilter_word:ifwordnotintf_dict:ILdietword=1else:tLdictword+=1forwordintfldict:tfldictword=tLdictword/len(content)#计算每个词的频率,即出现次数除以总单词数# 统计IDF值,即每个词在所有文本中出现的频率倒数的对数idf_dict=document=Filter_words()#通过FiltejWordS函数获取所有文本,每个文本都是一个单
15、词列表doc_total=Ien(Clocument)#计算文本总数fordocindocument:forwordinset(doc):ifwordnotinidf_dict:idf_dictword=1else:idf_dictword+=1forwordinidf-dict:idCdictword=math.log(doc-total/(idfldictword+1)#计算每个词的IDF值# 计算TFJDF值,即每个词的TF值乘以其IDF值tCidLdict=forwordinfilter_word:ifwordnotinidf-dict:idLdictwordl=0#若一个词在所有文本
16、中都没有出现过,则其IDF值为0tfjdfldiclword=tf_dict|word*idf_dict|word# 提取前10个关键词,并输出结果keyword=10Print(TF-IDF模型提取出的关键词:,)forkey,valueinSOrted(tfJdfLdict.items。,key=operator.itemgetter(1),reverse=True):keyword:print(key+7,end=)tJdf()运行提取文档关键词代码,得到TF-IDF模型提取出的关键词如下。提取出的关键词在文本中具有较高的权重,表明它们在文档中起到了关键作用。TF-IDF模型提取出的关键词:国旗/记者/地面/塔架/组合体/环月/月球/科技日报/北京/李晨/TF-IDF算法的结果较好,由于提取关键词时,有些词语在文档中出现的频次、词性等信息比较接近,所以提取关键词时它们出现的概率很有可能一样。当多次运行程序时,关键词出现的顺序可能会发生改变。5实训小结技术点自评达标未达标能够掌握读取文档的相关代码能够通过自定义Stop_words函数获取停用词列表,自定义Filter_word函数处理文档能够通过TF-IDF算法对关键词进行提取心得体会(如遇到的问题及解决方法、存在的不足之处等),