用 Python 手把手搭建基础 NLP pipeline:从数据清洗到文本分词
在文本向量化中,词频矩阵可表示为: $$ \mathbf{X} = \begin{bmatrix} f_{11} & f_{12} & \cdots & f_{1n} \ \vdots & \vdots & \ddots & \vdots \ f_{m1} & f_{m2} & \cdots & f_{mn} \end{bmatrix} $$ 其中 $f_{ij}$ 表示第 $i$ 文档中第 $j
·
Python 搭建基础 NLP Pipeline:从数据清洗到文本分词
以下是完整的 NLP 基础处理流程,包含代码实现和关键步骤说明:
1. 环境准备
# 安装必要库
!pip install jieba nltk pandas numpy
import re
import jieba
import string
import pandas as pd
from nltk.corpus import stopwords
nltk.download('stopwords') # 下载停用词库
2. 数据加载与清洗
def load_data(file_path):
"""加载原始文本数据"""
with open(file_path, 'r', encoding='utf-8') as f:
raw_text = f.read()
return raw_text
def clean_text(text):
"""执行数据清洗"""
# 移除特殊字符和数字
text = re.sub(r'[^\w\s]', '', text)
text = re.sub(r'\d+', '', text)
# 转换为小写
text = text.lower()
# 移除多余空格
text = re.sub(r'\s+', ' ', text).strip()
return text
# 示例使用
raw_data = load_data('sample.txt')
cleaned_data = clean_text(raw_data)
print("清洗后文本:", cleaned_data[:100] + "...")
清洗效果:
原始: "2023年NLP报告: 深度学习模型(BERT)准确率达92.5%!"
清洗后: "年nlp报告 深度学习模型bert准确率达"
3. 文本分词处理
def chinese_tokenize(text):
"""中文分词处理"""
seg_list = jieba.cut(text, cut_all=False)
return list(seg_list)
def english_tokenize(text):
"""英文分词处理"""
tokens = text.split()
# 移除停用词
stop_words = set(stopwords.words('english'))
tokens = [word for word in tokens if word not in stop_words]
# 移除标点
tokens = [word.translate(str.maketrans('', '', string.punctuation)) for word in tokens]
return tokens
# 自动检测语言类型
def tokenize(text):
if any('\u4e00' <= char <= '\u9fff' for char in text): # 检测中文字符
return chinese_tokenize(text)
else:
return english_tokenize(text)
# 示例使用
tokens = tokenize(cleaned_data)
print("分词结果:", tokens[:10])
分词效果:
中文输入: "自然语言处理是人工智能的重要分支"
输出: ['自然语言', '处理', '是', '人工智能', '的', '重要', '分支']
英文输入: "nlp pipelines include tokenization and cleaning"
输出: ['nlp', 'pipelines', 'include', 'tokenization', 'cleaning']
4. 完整Pipeline封装
class NLPipeline:
def __init__(self, file_path):
self.raw_text = load_data(file_path)
self.clean_text = clean_text(self.raw_text)
self.tokens = tokenize(self.clean_text)
def get_results(self):
return {
"raw_text": self.raw_text[:200] + "...",
"clean_text": self.clean_text[:200] + "...",
"tokens": self.tokens[:20]
}
# 使用示例
pipeline = NLPipeline('data.txt')
results = pipeline.get_results()
print("原始文本:", results["raw_text"])
print("清洗文本:", results["clean_text"])
print("分词结果:", results["tokens"])
5. 进阶扩展建议
- 词干提取:添加
nltk.stem.PorterStemmer() - 词向量化:使用
sklearn.feature_extraction.text.CountVectorizer - 实体识别:集成
spacy库 - 情感分析:使用预训练模型如
TextBlob
# 词向量化示例
from sklearn.feature_extraction.text import CountVectorizer
vectorizer = CountVectorizer()
X = vectorizer.fit_transform([" ".join(pipeline.tokens)])
print("词频矩阵:\n", X.toarray())
数学表达说明
在文本向量化中,词频矩阵可表示为: $$ \mathbf{X} = \begin{bmatrix} f_{11} & f_{12} & \cdots & f_{1n} \ \vdots & \vdots & \ddots & \vdots \ f_{m1} & f_{m2} & \cdots & f_{mn} \end{bmatrix} $$ 其中 $f_{ij}$ 表示第 $i$ 文档中第 $j$ 个词的出现频率。
通过此流程,您已构建完整的NLP基础处理流水线,可直接应用于文本分类、情感分析等下游任务。
火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。
更多推荐
所有评论(0)