书籍数据科学技术与应用_文本数据

Sklearn模块

  • 无监督:cluster(聚类)、decomposition(因子分解)、mixture(高斯混合模型)、neural_network(无监督的神经网络)、covariance(协方差估计)
  • 有监督:tree(决策树)、svm(支持向量机)、neighbors(近邻算法)、linear_model(广义线性模型)、neural_network(神经网络)、kernel_ridge(岭回归)、naive_bayes(朴素贝叶斯)
  • 数据转换:feature_extraction(特征提取)feature_selection(特征选择)、preprocessing(预处理)

文本数据处理

  • 识别垃圾邮件时,先对邮件的文本信息进行清洗、特征提取后,再用 SVM 等对其进行训练分类
  • 词袋(bag of words)模型将每条文本看成一个袋子,里面装着词,分析时用袋里的词代表整篇文本
  • 为每条文本生成词袋,需用 sklearn 提供的 feature_extraction.text 模块的 CountVectorizer 类
  • TF-IDF 模型表示词频-逆文档频率,计算特征时可用 CountVectorizer 类向量化后再调用 TfidTransformer 类,也可以直接调用TfidTransformer 类。

词袋模型

# 导入 CountVectorizer 类用于提取文本特征、jieba 库用于文本剪切
  from sklearn. feature_extraction. text import CountVectorizer
  import jieba

# 文本定义、剪切
# lcut 得到逗号剪切的句子,join 得到空格剪切的句子,append 得到空格剪切的文章
  article = [ '我是中国人,我爱中国',
  '我是上海人',
  '我住在上海松江大学城',
  '松江大学城有很多大学',
  '大学城共有15万余大学生' ]
  article_space_cut = []
  for sentence in article:
    sentence_comma_cut = jieba. lcut (sentence)
    sentence_space_cut = ' '. join (sentence_comma_cut)
  article_space_cut. append (sentence_space_cut)
  print (article_space_cut)

# 生成词袋
# 初始化(token_pattern 显示字符数为1的词),转为数字,特征词语,特征向量
  cidai = CountVectorizer (token_pattern = r"(?u)\b\w+\b")
  cidai_fit = cidai. fit_transform (article_space_cut)
  print (cidai. get_feature_names())
  print (cidai_fit. toarray())

TF-IDF 模型

# 导入 TfidfVectorizer 类用于提取文本特征
  from sklearn. feature_extraction. text import TfidfVectorizer

# 生成 TF-IDF 特征
  tf = TfidfVectorizer (token_pattern = r"(?u)\b\w+\b")
  tf_fit = tf. fit_transform (article_space_cut)
  print (tf_fit.toarray())

垃圾邮件识别(TF-IDF 提取特征、SVM 分类)

#导入 TfidfVectorizer 类用于提取文本特征、jieba 库用于文本剪切
  import jieba
  from sklearn. feature_extraction. text import TfidfVecto

# 文本导入、剪切
# lcut 得到逗号剪切的句子,join 得到空格剪切的句子,append 得到空格剪切的文章
  article = open ('mailcorpus.txt', 'r', encoding = 'utf-8')
  line = article. readlines()
  article_space_cut = []
  for sentence in line:
    sentence_comma_cut = jieba.lcut (sentence)
    sentence_space_cut = ' '.join (sentence_comma_cut)
    article_space_cut. append (sentence_space_cut)
  article_space_cut [0:5]

# 生成 TF-IDF 特征
  tf = TfidfVectorizer (token_pattern = r"(?u)\b\w+\b")
  tf_fit = tf. fit_transform (article_space_cut)
  print (tf_fit. toarray())

# 数据准备,导入 GaussianNB 类用于朴素贝叶斯模型训练分类
  from sklearn. naive_bayes import GaussianNB
  beiyesi = GaussianNB()
  y = [0]*5000 + [1]*5000
  x = tf_fit. toarray()

# 划分测试集,导入 model_selection 模块
  from sklearn import model_selection
  x_train, x_test, y_train, y_test = model_selection. train_test_split (x, y, test_size = 0.4, random_state = 0)

# 训练模型
  beiyesi. fit (x_train, y_train)

# 测试集上性能评估,导入 metrics 模块
  from sklearn import metrics
  y_test_pred = beiyesi. predict (x_test)
  score = beiyesi. score (x_test,y_test)
  print ('准确度为:', score)
  report = metrics. classification_report (y_test, y_test_pred)
  matrix = metrics. confusion_matrix (y_test, y_test_pred)
  print ('分类报告为:', report)
  print ('模糊矩阵为:', matrix)

感想

  • 词袋和 TF-IDF 原理不同,从语言角度,词袋是从词语的字面理解出发,TF-IDF 则是从文章的阅读理解出发
posted @   找回那所有、  阅读(31)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
这里到底了哦~(●'◡'●)
点击右上角即可分享
微信分享提示