![自然语言处理应用与实战](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=1739254025-12yAsirrWPCqeSWKpGIdeOzly9NsdXvS-0-796ab2aab6b7865d1c1eff79f398bf27)
Python中常用的读取文件的函数有三种,分别为read()、readline()、readlines(),下面分别介绍这三个函数的具体用法。test.txt文本文件中的内容如图1.6所示。
![](https://epubservercos.yuewen.com/11E41C/26126104909945906/epubprivate/OEBPS/Images/45017_25_1.jpg?sign=1739254025-MVaFlhmAcU64B9CVdviFMFVBEOUUcZ6D-0-3044eeabfc291c9a82e835136f71acfe)
图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=1739254025-799vWYO7xVC99Dcjgyl4qcAWBMr7vuFo-0-94918b3714fa347d84c445d06c69d700)
通过变量f将文件的内容赋值给变量data。文件的每行结尾处都有一个不可见的控制字符“\n”作为结束标志。通过print就可以打印出文件原本的内容。
代码运行结果如下所示:
![](https://epubservercos.yuewen.com/11E41C/26126104909945906/epubprivate/OEBPS/Images/45017_25_3.jpg?sign=1739254025-7XZ3zeq8ZEW3WjPW3TDMyyr0qKU6yAcE-0-cb561c670ae0f6017e2716de56e4ea9d)
(2)readline()方法。该方法只读取文本文件的第一行内容,以字符串的形式返回结果。
![](https://epubservercos.yuewen.com/11E41C/26126104909945906/epubprivate/OEBPS/Images/45017_25_4.jpg?sign=1739254025-DunDt8iQX7gYt5PCjPdtBvsXk9iKs7ti-0-cc5b652cd72e06163240d2af24dcb96f)
readline()方法从文件指针的位置开始,向后读到“\n”结束本次读取。
代码运行结果如下所示:
![](https://epubservercos.yuewen.com/11E41C/26126104909945906/epubprivate/OEBPS/Images/45017_25_5.jpg?sign=1739254025-hwORY2uNhSju4jJgeafdIhP97o5zTUTx-0-f6f190fa8055e5fb24159ad086c0c5cb)
(3)readlines()方法。该方法读取文本文件中的所有信息,并以列表的方式返回结果。
![](https://epubservercos.yuewen.com/11E41C/26126104909945906/epubprivate/OEBPS/Images/45017_25_6.jpg?sign=1739254025-A004iC6mrVFrDpxMRANmXsFXlUeNjlQI-0-f39faf7b341fb4372d5f1a5e89b4193b)
readlines()方法从文件指针的起始位置读到结尾,每一行作为列表中的一项,通常也可以结合for循环一起使用。
代码运行的结果如下所示:
![](https://epubservercos.yuewen.com/11E41C/26126104909945906/epubprivate/OEBPS/Images/45017_26_1.jpg?sign=1739254025-tcklcuHXG6PIx3CQsprDMOlA9ADcFpU7-0-b248ebc30c39bde83fed3621bc421583)
在本节最开始时我们已经提出,文件的基本操作是打开、读写和关闭,但是读者可以看到案例中的代码并没有手动关闭,这是因为使用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=1739254025-bOY005kdWOzSXjn7CWraB2iVL3KmOGEA-0-5acdacce5a301fac04492846b45b7f92)
3.实验步骤
创建words_counter.py源码文件,用于实现词频的统计。
按照如下步骤编写代码。
步骤一:导入模块
![](https://epubservercos.yuewen.com/11E41C/26126104909945906/epubprivate/OEBPS/Images/45017_26_3.jpg?sign=1739254025-DXJHyfkbyt4L6enLIpodCOfpQuMhqT4M-0-937173e63d2291e919b5aa42c0acc2fd)
步骤二:编写read_text函数实现词频统计
![](https://epubservercos.yuewen.com/11E41C/26126104909945906/epubprivate/OEBPS/Images/45017_26_4.jpg?sign=1739254025-yhee3j4k90yPdtHFF3dTAXX1iN0rjVVB-0-3f2323d1a74112fe358dff232b789ba5)
![](https://epubservercos.yuewen.com/11E41C/26126104909945906/epubprivate/OEBPS/Images/45017_27_1.jpg?sign=1739254025-6REd9jPPFOC4V9vXrJH2p2B2N5ecAwy8-0-67965324f1905237463e4d312dedbb6d)
步骤三:自定义main方法和主函数处理
![](https://epubservercos.yuewen.com/11E41C/26126104909945906/epubprivate/OEBPS/Images/45017_27_2.jpg?sign=1739254025-qxZxFyb4eAT7HEHZcAEApKrQ6umUpBTm-0-2754dbfe4979622aa34e5f20499f2d62)
步骤四:运行代码
使用如下命令运行实验代码。
![](https://epubservercos.yuewen.com/11E41C/26126104909945906/epubprivate/OEBPS/Images/45017_27_3.jpg?sign=1739254025-xOWzc8nlVEWD2icPMDJ8ZeRasFPoFsLT-0-f0e849db8fcd7a212af35fe8f0ee029c)
运行结果如下所示:
![](https://epubservercos.yuewen.com/11E41C/26126104909945906/epubprivate/OEBPS/Images/45017_27_4.jpg?sign=1739254025-14EMwsgu7dm1Z6NvarzQvilxG0R5zFWm-0-608dea533fee828061f9e81433ac40a3)
1.3.3 案例实现——词云生成
1.实验目标
使用Python绘制文本文件中中文汉字的词云。
2.实验目标
实验环境如表1.6所示。
表1.6 实验环境
![](https://epubservercos.yuewen.com/11E41C/26126104909945906/epubprivate/OEBPS/Images/45017_28_2.jpg?sign=1739254025-wGdLz8hafII8fKQy7WviQLM1WwYRMOdV-0-695405a2bc4310fbe243a77bcdd18a1b)
3.实验步骤
创建word_cloud工程目录,实验目录结构如图1.7所示。
![](https://epubservercos.yuewen.com/11E41C/26126104909945906/epubprivate/OEBPS/Images/45017_28_3.jpg?sign=1739254025-R7ywzYLEnRRoahOSvIoujnB6nm9TvXW4-0-01df899edb6e42d602edcca817d968c0)
图1.7 实验目录结构
按照如下步骤编写代码。
步骤一:导入模块
![](https://epubservercos.yuewen.com/11E41C/26126104909945906/epubprivate/OEBPS/Images/45017_28_4.jpg?sign=1739254025-KVSk8AjwTOLs5mWcV5ifgC9cXHJjAkuG-0-ff2afdc3eb6c338a21dbebbd341db189)
步骤二:创建停用词列表
![](https://epubservercos.yuewen.com/11E41C/26126104909945906/epubprivate/OEBPS/Images/45017_28_5.jpg?sign=1739254025-ZdoyAqGXKbCebRc6hoSpHF55gYVGOxnE-0-659ea0b11dbe3407bffa6133cd1e7b1f)
![](https://epubservercos.yuewen.com/11E41C/26126104909945906/epubprivate/OEBPS/Images/45017_29_1.jpg?sign=1739254025-5YbDivw1R8fHi47VedeWUc7fcvSD5swd-0-315a766dd01a7a22f9f115d8da51c04a)
步骤三:对句子进行分词
![](https://epubservercos.yuewen.com/11E41C/26126104909945906/epubprivate/OEBPS/Images/45017_29_2.jpg?sign=1739254025-PnuWx4IKumGNpIXMDrG8EeyzdTRAMpFs-0-1b91689b5c1e0c87c048d6defbc51e7f)
步骤四:读取文本文件,并对文本中的句子分词
![](https://epubservercos.yuewen.com/11E41C/26126104909945906/epubprivate/OEBPS/Images/45017_29_3.jpg?sign=1739254025-0Zan0G2sH66DduOHfhv727oWIpRcIFWQ-0-9d836d379533733d750b5548ecb05a8b)
步骤五:调用wordcloud库构建词云,保存结果
![](https://epubservercos.yuewen.com/11E41C/26126104909945906/epubprivate/OEBPS/Images/45017_29_4.jpg?sign=1739254025-mJvvT2x6XgGzrluqjIpdlM8ISqOZ4nME-0-b9ee04b2b8dab61a4d34a1278bb78e86)
步骤六:运行代码
使用如下命令运行代码。
![](https://epubservercos.yuewen.com/11E41C/26126104909945906/epubprivate/OEBPS/Images/45017_29_5.jpg?sign=1739254025-qHZ7zhXqq9Lpi0kFqpVPA2LGUBKTPohQ-0-72dc6fb09e310f110a7b02da8bbb837b)
经过运行,lighting的词云效果如图1.8所示。
![](https://epubservercos.yuewen.com/11E41C/26126104909945906/epubprivate/OEBPS/Images/45017_30_1.jpg?sign=1739254025-S8rnJ7UfKYkbcJnd7ElThj1630LUN73q-0-1368cf48c7ff96acb257066221e401df)
图1.8 lighting的词云效果