在自然语言处理(NLP)领域,文本数据的预处理是至关重要的基础环节。它如同工匠雕琢璞玉前的打磨工作,直接影响后续模型分析与挖掘的效果。本文将基于 Python,以电商平台的差评和优质评价文本数据为例,详细展示中文文本从原始读取、分词到停用词去除的完整处理流程。
一、数据读取:获取原始评价文本
首先,使用pandas
库读取存储在本地的差评和优质评价文本数据。数据以文本文件形式存在,编码格式为gbk
,通过read_table
函数可以轻松将数据加载到数据框中。
import pandas as pd
cp_content = pd.read_table(r".\差评.txt",encoding='gbk')
yzpj_content = pd.read_table(r".\优质评价.txt",encoding='gbk')
上述代码中,cp_content
和yzpj_content
分别存储了差评和优质评价的文本数据。通常,这些数据文件中会包含诸如评价内容、评价时间、用户 ID 等多列信息,在本次处理中,我们重点关注核心的评价内容列。
二、中文分词:利用 Jieba 库拆解文本
中文与英文不同,英文单词间天然存在空格分隔,而中文文本是连续的字符序列,因此需要专门的分词工具将其拆分为词语单元。Jieba 分词是 Python 中最常用的中文分词库之一,它支持精确模式、全模式、搜索引擎模式等多种分词模式,能够满足不同场景的需求。
我们通过以下代码对差评和优质评价文本进行分词处理:
import jieba
cp_segments =[]
contents = cp_content.content.values.tolist()
for content in contents:
results = jieba.lcut(content)
if len(results) > 1:
cp_segments.append(results)
cp_fc_results=pd.DataFrame({'content':cp_segments})
cp_fc_results.to_excel('cp_fc_results.xlsx',index=False)
yzpj_segments = []
contents = yzpj_content.content.values.tolist()
for content in contents:
results = jieba.lcut(content)
if len(results)>1:
yzpj_segments.append(results)
yzpj_fc_results=pd.DataFrame({'content':yzpj_segments})
yzpj_fc_results.to_excel('yzpj_fc_results.xlsx',index=False)
在上述代码中:
- 首先将数据框中
content
列的数据提取并转换为列表形式,方便后续逐句处理。 - 使用
jieba.lcut
函数对每一条评价文本进行分词,lcut
表示以列表形式返回分词结果。 - 为了保证分词结果的有效性,过滤掉分词后词语数量小于等于 1 的情况(这类结果可能是无意义的短文本或异常数据)。
- 最后将分词结果存储到新的数据框中,并保存为 Excel 文件,便于后续查看和进一步处理 。
三、停用词去除:净化文本数据
在分词后的文本中,存在大量如 "的""了""在""是" 等对文本语义表达贡献较小的词语,这些词语被称为停用词。去除停用词可以有效减少数据噪声,突出文本的关键信息,提升后续分析的效率和准确性。
我们从本地读取停用词表,并编写函数实现停用词去除功能:
stopwords = pd.read_csv(r".\stopwordscN.txt",encoding='utf8', engine='python',index_col=False)
def drop_stopwords(contents, stopwords):
segments_clean=[]
for content in contents:
line_clean =[]
for word in content:
if word in stopwords:
continue
line_clean.append(word)
segments_clean.append(line_clean)
return segments_clean
contents = cp_fc_results.content.values.tolist()
stopwords = stopwords.stopword.values.tolist()
cp_fc_contents_clean_s = drop_stopwords(contents, stopwords)
contents = yzpj_fc_results.content.values.tolist()
yzpj_fc_contents_clean_s = drop_stopwords(contents, stopwords)
具体步骤如下:
- 使用
pandas
读取停用词表文件,通常停用词表是一个包含多列数据的文本文件,这里假设stopword
列存储了具体的停用词。 - 定义
drop_stopwords
函数,该函数接收分词后的文本列表和停用词列表作为参数。在函数内部,通过双重循环遍历每一条文本中的每个词语,判断词语是否在停用词列表中,如果是则跳过,否则将词语保留,最终返回去除停用词后的文本列表。 - 分别对差评和优质评价的分词结果进行停用词去除操作,得到清洗后的文本数据。
四、总结与展望
通过上述步骤,我们完成了从原始评价文本数据到清洗分词的全流程处理。这一系列操作是中文文本处理的基础且关键环节,为后续诸如情感分析、文本分类、主题建模等高级自然语言处理任务奠定了坚实的基础。
后续,我们可以基于这些清洗后的数据,进一步探索文本向量化(如使用词袋模型、TF-IDF、Word2Vec 等方法),并结合机器学习或深度学习模型进行情感倾向判断,区分差评和优质评价;也可以进行文本相似度计算,挖掘相似评价内容,为商家改进服务、优化产品提供有价值的参考。