中文文本清洗和结巴分析,写一个详细python案例

简介: 你可以根据你的需要添加、删除或修改其中的词语。通常,停用词表会根据特定的任务和数据进行调整。

中文文本清洗和结巴分析在自然语言处理中是非常常见的任务,本案例将演示如何用Python进行中文文本清洗和结巴分析。具体来说,我们将使用Python中的re、jieba和pandas库,对中文文本数据进行清洗,并将文本数据分词后存储为DataFrame。

首先,我们需要准备一些中文文本数据,本案例将使用一个示例数据集,该数据集包含了一些中文新闻文章的标题和正文。

1. 导入库和数据

首先,我们需要导入必要的库和数据:


import re
import jieba
import pandas as pd
# 读取数据
data = pd.read_csv('news_data.csv')

2. 文本清洗

在对中文文本进行分词前,我们需要对文本进行清洗,包括去除标点符号、数字和停用词等。具体步骤如下:

2.1 去除标点符号和数字

我们可以使用正则表达式去除中文文本中的标点符号和数字。下面的代码演示了如何去除标点符号和数字:


def clean_text(text):
    # 去除标点符号和数字
    text = re.sub(r'[^\u4e00-\u9fa5]+', '', text)
    return text

2.2 去除停用词

停用词是指在文本中经常出现但并不对文本主题有贡献的词语,例如“的”、“了”等。我们可以使用一个停用词表对文本进行去除停用词。下面的代码演示了如何去除停用词:

def remove_stopwords(text):
    # 加载停用词表
    stopwords = set(pd.read_csv('stopwords.txt', header=None)[0])
    # 去除停用词
    text = [word for word in text if word not in stopwords]
    return text

3. 分词和统计

在完成文本清洗后,我们可以对文本进行分词和统计。具体步骤如下:

3.1 分词

我们可以使用jieba库对文本进行分词。下面的代码演示了如何使用jieba库对文本进行分词:


def cut_words(text):
    # 分词
    words = jieba.cut(text)
    # 去除停用词
    words = remove_stopwords(words)
    # 返回分词结果
    return words

3.2 统计词频

我们可以使用Python的Counter类对分词结果进行统计。下面的代码演示了如何使用Python的Counter类对分词结果进行统计:


from collections import Counter
# 分词和统计词频
data['words'] = data['text'].apply(clean_text).apply(cut_words)
# 统计词频
word_count = Counter([word for words in data['words'] for word in words])

4. 存储分词结果

最后,我们可以将分词结果存储为DataFrame。下面的代码演示了如何将分词结果存储为DataFrame:


# 存储分词结果
df_word_count = pd.DataFrame.from_dict(word_count, orient='index', columns=['count'])
df_word_count.index.name = 'word'
df_word_count = df_word_count.reset_index()
df_word_count = df_word_count.sort_values('count', ascending=False)

完整代码

最终的代码如下所示:

import re
import jieba
import pandas as pd
from collections import Counter
# 读取数据
data = pd.read_csv('news_data.csv')
def clean_text(text):
    # 去除标点符号和数字
    text = re.sub(r'[^\u4e00-\u9fa5]+', '', text)
    return text
def remove_stopwords(text):
    # 加载停用词表
    stopwords = set(pd.read_csv('stopwords.txt', header=None)[0])
    # 去除停用词
    text = [word for word in text if word not in stopwords]
    return text
def cut_words(text):
    # 分词
    words = jieba.cut(text)
    # 去除停用词
    words = remove_stopwords(words)
    # 返回分词结果
    return words
# 分词和统计词频
data['words'] = data['text'].apply(clean_text).apply(cut_words)
word_count = Counter([word for words in data['words'] for word in words])
# 存储分词结果
df_word_count = pd.DataFrame.from_dict(word_count, orient='index', columns=['count'])
df_word_count.index.name = 'word'
df_word_count = df_word_count.reset_index()
df_word_count = df_word_count.sort_values('count', ascending=False)
print(df_word_count.head(20))

结果展示

最终的结果将输出分词结果中出现频率最高的20个词语以及它们的词频:

      word  count
16      美国    368
66      中国    291
114     市场    183
233     发展    161
30      公司    157
54      政府    142
34      企业    132
19      日本    128
12      国际    124
49      投资    114
147     经济    111
156    汽车产业    109
237    人工智能    107
307     技术    106
35      行业    103
123     人民币   100
25      互联网   100
5        金融    99
308  区块链技术    95
248     机会    94

以下是一个简单的示例 stopwords.txt 文件,包含了一些中文停用词:


你可以根据你的需要添加、删除或修改其中的词语。通常,停用词表会根据特定的任务和数据进行调整。

相关文章
|
26天前
|
机器学习/深度学习 算法 搜索推荐
从理论到实践,Python算法复杂度分析一站式教程,助你轻松驾驭大数据挑战!
【10月更文挑战第4天】在大数据时代,算法效率至关重要。本文从理论入手,介绍时间复杂度和空间复杂度两个核心概念,并通过冒泡排序和快速排序的Python实现详细分析其复杂度。冒泡排序的时间复杂度为O(n^2),空间复杂度为O(1);快速排序平均时间复杂度为O(n log n),空间复杂度为O(log n)。文章还介绍了算法选择、分而治之及空间换时间等优化策略,帮助你在大数据挑战中游刃有余。
51 4
|
23天前
|
数据采集 Python
Python实用记录(七):通过retinaface对CASIA-WebFace人脸数据集进行清洗,并把错误图路径放入txt文档
使用RetinaFace模型对CASIA-WebFace人脸数据集进行清洗,并将无法检测到人脸的图片路径记录到txt文档中。
36 1
|
12天前
|
数据采集 JSON 数据处理
抓取和分析JSON数据:使用Python构建数据处理管道
在大数据时代,电商网站如亚马逊、京东等成为数据采集的重要来源。本文介绍如何使用Python结合代理IP、多线程等技术,高效、隐秘地抓取并处理电商网站的JSON数据。通过爬虫代理服务,模拟真实用户行为,提升抓取效率和稳定性。示例代码展示了如何抓取亚马逊商品信息并进行解析。
抓取和分析JSON数据:使用Python构建数据处理管道
|
4天前
|
数据可视化 开发者 Python
Python GUI开发:Tkinter与PyQt的实战应用与对比分析
【10月更文挑战第26天】本文介绍了Python中两种常用的GUI工具包——Tkinter和PyQt。Tkinter内置于Python标准库,适合初学者快速上手,提供基本的GUI组件和方法。PyQt基于Qt库,功能强大且灵活,适用于创建复杂的GUI应用程序。通过实战示例和对比分析,帮助开发者选择合适的工具包以满足项目需求。
30 7
|
3天前
|
存储 数据处理 Python
Python科学计算:NumPy与SciPy的高效数据处理与分析
【10月更文挑战第27天】在科学计算和数据分析领域,Python凭借简洁的语法和强大的库支持广受欢迎。NumPy和SciPy作为Python科学计算的两大基石,提供了高效的数据处理和分析工具。NumPy的核心功能是N维数组对象(ndarray),支持高效的大型数据集操作;SciPy则在此基础上提供了线性代数、信号处理、优化和统计分析等多种科学计算工具。结合使用NumPy和SciPy,可以显著提升数据处理和分析的效率,使Python成为科学计算和数据分析的首选语言。
13 3
|
23天前
|
数据可视化 算法 Python
基于OpenFOAM和Python的流场动态模态分解:从数据提取到POD-DMD分析
本文介绍了如何利用Python脚本结合动态模态分解(DMD)技术,分析从OpenFOAM模拟中提取的二维切片数据,以深入理解流体动力学现象。通过PyVista库处理VTK格式的模拟数据,进行POD和DMD分析,揭示流场中的主要能量结构及动态特征。此方法为研究复杂流动系统提供了有力工具。
53 2
基于OpenFOAM和Python的流场动态模态分解:从数据提取到POD-DMD分析
|
4天前
|
存储 机器学习/深度学习 算法
Python科学计算:NumPy与SciPy的高效数据处理与分析
【10月更文挑战第26天】NumPy和SciPy是Python科学计算领域的两大核心库。NumPy提供高效的多维数组对象和丰富的数学函数,而SciPy则在此基础上提供了更多高级的科学计算功能,如数值积分、优化和统计等。两者结合使Python在科学计算中具有极高的效率和广泛的应用。
13 2
|
9天前
|
数据采集 机器学习/深度学习 搜索推荐
Python自动化:关键词密度分析与搜索引擎优化
Python自动化:关键词密度分析与搜索引擎优化
|
10天前
|
数据可视化 算法 JavaScript
基于图论的时间序列数据平稳性与连通性分析:利用图形、数学和 Python 揭示时间序列数据中的隐藏模式
本文探讨了如何利用图论分析时间序列数据的平稳性和连通性。通过将时间序列数据转换为图结构,计算片段间的相似性,并构建连通图,可以揭示数据中的隐藏模式。文章介绍了平稳性的概念,提出了基于图的平稳性度量,并展示了图分区在可视化平稳性中的应用。此外,还模拟了不同平稳性和非平稳性程度的信号,分析了图度量的变化,为时间序列数据分析提供了新视角。
28 0
基于图论的时间序列数据平稳性与连通性分析:利用图形、数学和 Python 揭示时间序列数据中的隐藏模式
|
19天前
|
自然语言处理 算法 数据挖掘
探讨如何利用Python中的NLP工具,从被动收集到主动分析文本数据的过程
【10月更文挑战第11天】本文介绍了自然语言处理(NLP)在文本分析中的应用,从被动收集到主动分析的过程。通过Python代码示例,详细展示了文本预处理、特征提取、情感分析和主题建模等关键技术,帮助读者理解如何有效利用NLP工具进行文本数据分析。
40 2