中文文本清洗和结巴分析在自然语言处理中是非常常见的任务,本案例将演示如何用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
文件,包含了一些中文停用词:
的 了 和 在 是
你可以根据你的需要添加、删除或修改其中的词语。通常,停用词表会根据特定的任务和数据进行调整。