![自然语言处理应用与实战](https://wfqqreader-1252317822.image.myqcloud.com/cover/398/46841398/b_46841398.jpg)
1.3 文本数据处理
1.3.1 文本操作基础
文本操作的基本步骤是:打开—读写—关闭。这里的“打开”并不是使用文本编辑打开一个文件,而是相当于用一个文件指针指向文件存储的起始位置。在Python中打开文件采用的方法是open,常用的模式有读、写、追加等。表1.4给出了文件操作的不同模式。
表1.4 文件操作的不同模式
![](https://epubservercos.yuewen.com/11E41C/26126104909945906/epubprivate/OEBPS/Images/45017_24_4.jpg?sign=1739208835-feCWAMpW4FLbehNLQPaNMqsL3gADzz2G-0-5ad9370cfa3eabb7f9ba8eef47cac82a)
Python中常用的读取文件的函数有三种,分别为read()、readline()、readlines(),下面分别介绍这三个函数的具体用法。test.txt文本文件中的内容如图1.6所示。
![](https://epubservercos.yuewen.com/11E41C/26126104909945906/epubprivate/OEBPS/Images/45017_25_1.jpg?sign=1739208835-ux6HgDmbMZzpwit2CAWd5Z1pDxCKsu2V-0-6a9044fc1401d927c46e297b618d4617)
图1.6 test.txt文本文件中的内容
以读取test.txt为例,查看read、readline和readlines函数的区别。
(1)read()方法。通过文件对象的read方法读取内容,并以字符串的形式返回结果。
![](https://epubservercos.yuewen.com/11E41C/26126104909945906/epubprivate/OEBPS/Images/45017_25_2.jpg?sign=1739208835-zBJrwysRDdIDpruMkLvRuTVirpPa9j5h-0-9bfaebe3c405e7286d772eb891c137b8)
通过变量f将文件的内容赋值给变量data。文件的每行结尾处都有一个不可见的控制字符“\n”作为结束标志。通过print就可以打印出文件原本的内容。
代码运行结果如下所示:
![](https://epubservercos.yuewen.com/11E41C/26126104909945906/epubprivate/OEBPS/Images/45017_25_3.jpg?sign=1739208835-wOoLx8hzQQJDaYamFHwR8X1kncu3QRZi-0-8bc8298de71abb309dfb8d3f56ee305d)
(2)readline()方法。该方法只读取文本文件的第一行内容,以字符串的形式返回结果。
![](https://epubservercos.yuewen.com/11E41C/26126104909945906/epubprivate/OEBPS/Images/45017_25_4.jpg?sign=1739208835-aoIw9ehhftnY5ypAuOBP9GYTmaPcr7UZ-0-579bf9687892a362286068a4dc908594)
readline()方法从文件指针的位置开始,向后读到“\n”结束本次读取。
代码运行结果如下所示:
![](https://epubservercos.yuewen.com/11E41C/26126104909945906/epubprivate/OEBPS/Images/45017_25_5.jpg?sign=1739208835-0PCdGtrV9lQkojdq3ZD5TFvELy6al5y0-0-26b390cfce5a5a5960c890f71bf3ed20)
(3)readlines()方法。该方法读取文本文件中的所有信息,并以列表的方式返回结果。
![](https://epubservercos.yuewen.com/11E41C/26126104909945906/epubprivate/OEBPS/Images/45017_25_6.jpg?sign=1739208835-ZXU5Sqc69ZhTG214cSG1Eiqqqn8zOstK-0-54d7b933d02e5ad569bd025fbbd4b846)
readlines()方法从文件指针的起始位置读到结尾,每一行作为列表中的一项,通常也可以结合for循环一起使用。
代码运行的结果如下所示:
![](https://epubservercos.yuewen.com/11E41C/26126104909945906/epubprivate/OEBPS/Images/45017_26_1.jpg?sign=1739208835-h0fA4dHOPEPd82LP0iufmuQaqkjJffnj-0-939e2cb9694fc61de7f2cc8ac032bd67)
在本节最开始时我们已经提出,文件的基本操作是打开、读写和关闭,但是读者可以看到案例中的代码并没有手动关闭,这是因为使用with关键字打开文件可以省去这一步。当with语句结束时,文件自动关闭。
1.3.2 案例实现——文本数据统计
1.实验目标
使用Python读取文本并统计词频。
2.实验目标
实验环境如表1.5所示。
表1.5 实验环境
![](https://epubservercos.yuewen.com/11E41C/26126104909945906/epubprivate/OEBPS/Images/45017_26_2.jpg?sign=1739208835-faleWYyUKEIPxueDwO0A4fA9fj7ouybr-0-c7ff521491a1ffde589733a9f25cc660)
3.实验步骤
创建words_counter.py源码文件,用于实现词频的统计。
按照如下步骤编写代码。
步骤一:导入模块
![](https://epubservercos.yuewen.com/11E41C/26126104909945906/epubprivate/OEBPS/Images/45017_26_3.jpg?sign=1739208835-7FdeUMA74X6cUJZ4tSrBYbgHAx6Wdwdm-0-f873f7316e760f9bf13bf8a274c1e29f)
步骤二:编写read_text函数实现词频统计
![](https://epubservercos.yuewen.com/11E41C/26126104909945906/epubprivate/OEBPS/Images/45017_26_4.jpg?sign=1739208835-4m4ZbYOPMTxQ7srWXiQ3M8AHj6F7elaP-0-1b7fe048d9d4d4ab9ed9de8e05ece638)
![](https://epubservercos.yuewen.com/11E41C/26126104909945906/epubprivate/OEBPS/Images/45017_27_1.jpg?sign=1739208835-m0fVQBW8YpO33Wr8fdUHUPDCM6pP69si-0-8b09686a5e320eca19eeed74220ae8f6)
步骤三:自定义main方法和主函数处理
![](https://epubservercos.yuewen.com/11E41C/26126104909945906/epubprivate/OEBPS/Images/45017_27_2.jpg?sign=1739208835-N5NwyL4QW2IxdtQoBHmhL8RMZYcwI51Q-0-7755d1e4d715ae82ee7cd1a1583ef82a)
步骤四:运行代码
使用如下命令运行实验代码。
![](https://epubservercos.yuewen.com/11E41C/26126104909945906/epubprivate/OEBPS/Images/45017_27_3.jpg?sign=1739208835-3ml6DcPOlLSWxD49ZSjq71o4856fjheJ-0-4ee7047af71804a5d882bd7352b382bc)
运行结果如下所示:
![](https://epubservercos.yuewen.com/11E41C/26126104909945906/epubprivate/OEBPS/Images/45017_27_4.jpg?sign=1739208835-W6AsecZ9GJZNORmJxZmydSPc7RlKW8m5-0-3b092bbc81a786d0d53bc0798ff0a912)
1.3.3 案例实现——词云生成
1.实验目标
使用Python绘制文本文件中中文汉字的词云。
2.实验目标
实验环境如表1.6所示。
表1.6 实验环境
![](https://epubservercos.yuewen.com/11E41C/26126104909945906/epubprivate/OEBPS/Images/45017_28_2.jpg?sign=1739208835-8QgxRGgwlV4AyjLfGMHoE6lYlDO8GWqa-0-d61c7cbf2749ecdb3c623593c506fe72)
3.实验步骤
创建word_cloud工程目录,实验目录结构如图1.7所示。
![](https://epubservercos.yuewen.com/11E41C/26126104909945906/epubprivate/OEBPS/Images/45017_28_3.jpg?sign=1739208835-uGW93cTRsynVOcYVfwabMkG2uJG7r8Hk-0-19747c36f5cb8142eba745ff96d6c4d9)
图1.7 实验目录结构
按照如下步骤编写代码。
步骤一:导入模块
![](https://epubservercos.yuewen.com/11E41C/26126104909945906/epubprivate/OEBPS/Images/45017_28_4.jpg?sign=1739208835-eIzPuavLwZWCjLWaeLNdy2ptr3YalTpI-0-e41dbc922077b1eea2f2cc5b5d1b4a1a)
步骤二:创建停用词列表
![](https://epubservercos.yuewen.com/11E41C/26126104909945906/epubprivate/OEBPS/Images/45017_28_5.jpg?sign=1739208835-ntlbgjVa33QteHIjMPmJKc8zR9PKsSPn-0-bd385e7e83468e39217d25934f3982a1)
![](https://epubservercos.yuewen.com/11E41C/26126104909945906/epubprivate/OEBPS/Images/45017_29_1.jpg?sign=1739208835-jCbr9ReK2O446hjQJF068DCbdkH3JG04-0-694a3964d23698af1f905402cff9b7e6)
步骤三:对句子进行分词
![](https://epubservercos.yuewen.com/11E41C/26126104909945906/epubprivate/OEBPS/Images/45017_29_2.jpg?sign=1739208835-EmIgj5ouSN1JCCFley5jZIaPnI67zsMP-0-8fa32feaf56b7c16c567248307860ac6)
步骤四:读取文本文件,并对文本中的句子分词
![](https://epubservercos.yuewen.com/11E41C/26126104909945906/epubprivate/OEBPS/Images/45017_29_3.jpg?sign=1739208835-cUQsChzMesNwyCaX8ncH0fOv08Z5CjRx-0-8e26c8990baaf6111d1a742f6977a01a)
步骤五:调用wordcloud库构建词云,保存结果
![](https://epubservercos.yuewen.com/11E41C/26126104909945906/epubprivate/OEBPS/Images/45017_29_4.jpg?sign=1739208835-BxHMqhT77bKmC3M1NX1dL2a2vwcpLJZI-0-b8f2a9d11270e4236ca8f397d28cb30d)
步骤六:运行代码
使用如下命令运行代码。
![](https://epubservercos.yuewen.com/11E41C/26126104909945906/epubprivate/OEBPS/Images/45017_29_5.jpg?sign=1739208835-I2ncaT7AV78UgVyHijOtSDBS9w9kjt7f-0-951735342f067f29e32e4a870548c492)
经过运行,lighting的词云效果如图1.8所示。
![](https://epubservercos.yuewen.com/11E41C/26126104909945906/epubprivate/OEBPS/Images/45017_30_1.jpg?sign=1739208835-yTqaS5tkU1WKMrMs7ui7tBhsL9WRjzQZ-0-f0340c15a12508d1ba6e9183a390d6b8)
图1.8 lighting的词云效果