机器学习实训jieba的中文分词实战
时间: 2025-03-08 14:05:18 浏览: 15
使用 jieba
进行中文分词的机器学习实战教程
自然语言处理中的预处理阶段
在自然语言处理(NLP)项目中,数据预处理是一个至关重要的环节。对于中文文本而言,分词是其中的关键步骤之一。jieba
是一个广泛使用的 Python 库,专门用于解决这一问题[^1]。
加载并配置 Jieba 分词器
为了确保最佳性能,在实际应用之前可以先加载所需的资源文件,并通过调用特定函数来设置自定义字典路径:
import jieba
# 设置大词典的位置
jieba.set_dictionary('path/to/your/large_dict.txt')
# 或者替换默认的小型内置词典
with open('new_custom_dict.txt', 'w+', encoding='utf-8') as f:
# 将新词典写入到指定位置...
# 覆盖原生小词典
jieba.load_userdict(f)
初始化与优化
考虑到效率因素,可以在适当时候显式地初始化 jieba
,从而避免不必要的重复操作:
import jieba
jieba.initialize()
此方法有助于减少首次执行时可能出现的时间开销[^2]。
基于 TF-IDF 的关键词提取
当涉及到更复杂的 NLP 任务如情感分析、主题建模等,则可能需要用到更高层次的功能——即基于统计模型(例如TF-IDF)来进行特征工程工作。幸运的是,jieba.analyse
提供了一个简单易用接口支持此类需求[^3]:
from sklearn.feature_extraction.text import TfidfVectorizer
import pandas as pd
import numpy as np
def extract_keywords(texts, topK=20):
vectorizer = TfidfVectorizer(tokenizer=jieba.lcut_for_search)
X = vectorizer.fit_transform(texts)
feature_names = np.array(vectorizer.get_feature_names_out())
scores = [(feature_names[col], score) for col, score in zip(X.nonzero()[1], X.data)]
sorted_scores = sorted(scores, key=lambda x: x[1], reverse=True)[:topK]
return dict(sorted_scores)
texts = ["这是一个测试例子", "另一个不同的句子"]
keywords_with_weights = extract_keywords(texts)
print(keywords_with_weights)
上述代码片段展示了如何利用 Scikit-Learn 和 jieba
来计算给定文档集合内的关键字及其权重值。
构建分类模型实例
下面给出一段完整的流程演示,它涵盖了从原始语料准备到最后训练完成整个过程:
from sklearn.model_selection import train_test_split
from sklearn.naive_bayes import MultinomialNB
from sklearn.pipeline import Pipeline
from sklearn.metrics import classification_report
from sklearn.datasets import fetch_20newsgroups
news_data = fetch_20newsgroups(subset="all")
X_train_raw, X_test_raw, y_train, y_test = train_test_split(
news_data["data"], news_data["target"], test_size=0.25, random_state=42
)
pipeline = Pipeline([
('vectorizer', TfidfVectorizer(tokenizer=jieba.lcut)),
('classifier', MultinomialNB(alpha=.01))
])
pipeline.fit(X_train_raw, y_train)
predictions = pipeline.predict(X_test_raw)
report = classification_report(y_test, predictions, target_names=news_data.target_names)
print(report)
这段脚本首先获取了新闻组的数据集作为样本输入源;接着创建了一条包含两个主要组件的工作流管道:一个是负责将每篇文档转换成数值表示形式(TfidfVectorizer
),另一个则是用来做最终预测工作的朴素贝叶斯分类器(MultinomialNB
)。最后评估所得到的结果质量。
相关推荐

















