python文本分析与贝叶斯算法

news2025/1/25 9:24:42

一、python文本分析概念

文本分析中第一个概念是停用词,这种词有三个特点:(1)语料中大量出现;(2)没啥用;(3)留着没用。比如符号(!@#)、语气词(啊、一个、一下)等。这类词找出来之后就可以剔除

第二个概念是TF-IDF(用来做关键词提取),TF指词频(Term Frequency),IDF(Inverse Document Frequency)指“逆文档频率”,如果某个词比较少见,但是它在这篇文章中多次出现,那么它很可能就反映了这篇文章的特性正是我们所需要的关键词。

词频(TF)=\frac{某个词在文章中的出现次数}{该文出现次数最多的词的出现次数}

逆文档频率(IDF)=log(\frac{语料库的文档总数}{包含该词的文档数+1})

区分TF和IDF关注一个特点:词频TF是在分析的文章中、逆文档频率IDF是假定找到全量文本后的分析,全量文档数可以用诸如的搜到的文档来估算。TF-IDF=TF×IDF,两者相乘就得到了这个词的重要程度!这个算法也很聪明。

第三个概念是相似度,一般用的比较多的是余弦相似度,如下图所示。这种相似度取决于先将词、句子向量化,找到足够的特征之后用余弦的映射概念比较两者之间的相关程度,向量化的也有自监督和标注的方式,自监督也是目前词嵌入里很棒的方法,总之有了词向量之后就有了NLP的基础。

第四个概念便是LDA(Linear Discriminant Analysis) :主题模型。LDA算法是一种有监督的机器学习算法,和PCA有点像,也是能做降维的,主要用在展示侧,要想看到图的效果,采用这个算法还不错,如果在训练中想减少维度就用PCA。

二、贝叶斯方法

贝叶斯想解决的问题,是逆向概率。正向概率是指,一个袋里有M个黑球、N个白球,那么我取出黑球的概率是多少,比较直观、好算。相较而言,逆向概率逻辑复杂一点,我们不知道有多少个白球、黑球,摸出来一个或几个黑球,我们对黑、白球比例做推测。

贝叶斯方法的数学逻辑很有意思,反映一种现实世界的不确定性,人类的观察能力是有局限性的,只能看到表面的结果,深层次的逻辑还需要推测。当然量子的世界也是概率性的,很适合这种数学逻辑。

贝叶斯公式:P(A|B)=\frac{P(B|A)P(A)}{P(B)}

公式很好记,实际应用中,比如单词纠错中有些变形的点。比如输错了一个单词thaw,实际上可能是that,用户实际输入的单词记为D(即为观测数据),猜测统一为P(h | D) 变形P(h) * P(D | h) / P(D),D是常数,不影响,看上面这一部分P(h) * P(D | h)就行。

对于P(h) * P(D | h)这部分的处理,用到三个概念,一是事件间的独立性,假定事件间相互独立,贝叶斯算法变成朴素贝叶斯,猜测变得更纯粹简单,当然牺牲了事件的真实性,这种牺牲在LSTM、Transformer中就不必要了,只要数据更大;二是最大似然,用来求P(D | h),最符合观测数据的估计最优优势;三是奥卡姆剃刀,指模型或者思维能用简单的更好,如果模型既可以用多种多项式表示,越是高阶的多项式越是不常见,采用P(h)较大的模型,我们如果看到h出现,那么就可以认为P(h)=1。

总结:贝叶斯算法在逻辑上很有趣,但在判断中准确率不高,后续逐步被深度学习算法融合、取代。

三、代码实例

采用jupyter notebook(适合做分析,pycharm适合做开发)看示例

先导包:

import pandas as pd
import jieba

导入数据,数据源:搜狗搜索引擎 - 上网从搜狗开始

pd.read_table中names表示列名,dropna表示剔除空值

df_news = pd.read_table('./data/val.txt',names=['category','theme','URL','content'],encoding='utf-8')
df_news = df_news.dropna()
df_news.head()

看看数据的维度是(5000, 4),包括用jieba进行分词等步骤省略,最后得到。

df_news.shape

去除停用词代码如下,contents即为昨晚各类处理后的文本,stopwords为停用词,选好停用词做剔除即可。

def drop_stopwords(contents,stopwords):
    contents_clean = []
    all_words = []
    for line in contents:
        line_clean = []
        for word in line:
            if word in stopwords:
                continue
            line_clean.append(word)
            all_words.append(str(word))
        contents_clean.append(line_clean)
    return contents_clean,all_words

TF-IDF 提取关键词,调用jieba.analyse即可:

import jieba.analyse
index = 2400
print (df_news['content'][index])
content_S_str = "".join(content_S[index])  
print ("  ".join(jieba.analyse.extract_tags(content_S_str, topK=5, withWeight=False)))

lda模型的调用,提取主题:

lda = gensim.models.ldamodel.LdaModel(corpus=corpus, id2word=dictionary, num_topics=20)
print (lda.print_topic(1, topn=5))

贝叶斯分类代码:

from nltk import NaiveBayesClassifier
nb_classifier = NaiveBayesClassifier.train(train_set)
nb_classifier.classify(gender_features('Gary'))

总结:python里面封装了大量包,很好用,不用重复造轮子,理解就行,根据需求再来找例子、挑着学、完成自己项目就行。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1495070.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2024年最全洗地机选购攻略盘点丨希亦、小米、云鲸、海尔洗地机哪款值得入手?

在现代家居清洁中,洗地机是不可或缺的得力助手,它融合了吸尘、拖地等多种功能。面对市场上琳琅满目的洗地机品牌和型号,选择一个可靠的品牌至关重要。优质的品牌能够提供高品质的产品,使您的清洁工作更加轻松高效。本文将向您推荐…

Android开发基础面试题,PDF超过6000页

前言 从毕业到现在面试也就那么几家公司,单前几次都比较顺利,在面到第三家时都给到了我offer!前面两次找工作,没考虑到以后需要什么,自己的对未来的规划是什么,只要有份工作,工资符合自己的要求…

阿里云域名优惠口令2024年最新,com、cn和域名注册续费使用

2024年阿里云域名优惠口令,com域名续费优惠口令“com批量注册更享优惠”,cn域名续费优惠口令“cn注册多个价格更优”,cn域名注册优惠口令“互联网上的中国标识”,阿里云优惠口令是域名专属的优惠码,可用于域名注册、续…

领到了腾讯云服务器红包,可以用于购买服务器,开心!

在2024年腾讯云新春采购节优惠活动上,可以领取新年惊喜红包,打开活动链接 https://curl.qcloud.com/oRMoSucP 会自动弹出红包领取窗口,如下图: 腾讯云2024新春采购节红包领取 如上图所示,点击“领”红包,每…

[C语言]——C语言常见概念(1)

目录 一.C语言是什么、 二.C语言的历史和辉煌 三.编译器的选择(VS2022为例) 1.编译和链接 2.编译器的对比 3.VS2022 的优缺点 四.VS项目和源文件、头文件介绍 五.第⼀个C语言程序 ​​​​​​​ 一.C语言是什么、 ⼈和⼈交流使⽤的是⾃然语⾔&…

20 easy 70. 爬楼梯

//假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 // // 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢? // // // // 示例 1: // // //输入:n 2 //输出:2 //解释:有两种方法可以爬到楼顶。 /…

cuda WSL2 无需单独安装

https://docs.nvidia.com/cuda/wsl-user-guide/index.html 这个写的很详细

Day27-Linux系统服务管理

Day27-Linux系统服务管理 1. ltrace:跟踪进程调用库函数2. 进程管理总结3. 什么是平均负载4. 可运行状态和不可中断状态是什么5. 平均负载其实就是【单位时间内的活跃进程数】。6. 如何查看Linux系统的cpu核数和颗数?7. 平均负载案例分析实战7.1 场景一&…

Pandas 之 merge

merge的作用: merge函数在Python的pandas库中的作用是用来合并两个或多个DataFrame数据表,依据指定的一个或多个键(通常是列名)进行连接操作[1]。 merge函数可以有多种连接类型(如内连接inner、左连接left、右连接ri…

SmartX 携手 openGauss 社区发布联合方案评测与性能最佳实践 | 附优化方法与测试数据

近日,北京志凌海纳科技有限公司(以下简称 “SmartX”)携手 openGauss 社区完成了 openGauss 数据库基于 SmartX 超融合平台(SMTX OS)和 SmartX 分布式存储平台(SMTX ZBS)的性能测试和调优。 结…

13. C++类使用方式

【类】 C语言使用函数将程序代码模块化,C通过类将代码进一步模块化,类用于将实现一种功能的全局数据、以及操作这些数据的函数集中存储在一起,同时可以设置类成员的访问权限,禁止外部代码使用和篡改本类成员,类成员访…

Vue开发实例(六)实现左侧菜单导航

左侧菜单导航 一、一级菜单二、二级菜单三、三级菜单1、加入相关事件 四、菜单点击跳转1. 创建新页面2. 配置路由3. 菜单中加入路由配置4、处理默认的Main窗口为空的情况 五、动态左侧菜单导航1、动态实现一级菜单2、动态实现二级菜单 一、一级菜单 在之前的Aside.vue中去实现…

Dynamo初学尝试梳理(五)-代码块上

“学而时习之,不亦说乎”,今天接着来,稍微提高点难度(高手直接忽略就行)。 代码块(Code Block),是 dynamo 中可以直接输入 DesignScript 的节点。可以通过双击鼠标左键,快…

JAVA WEB案例-登录校验-日志记录

一 前言 在现代社会中,随着互联网的快速发展,WEB应用的安全性问题变得越来越突出。作为一名程序员,我们不仅要注重WEB应用的功能实现,还需要重视安全性问题。在实际开发中,登录校验是非常重要的安全措施,能…

使用mapbox navigation搭建一个安卓导航 示例

一.代码示例地址: https://github.com/mapbox/mapbox-navigation-android-examples/tree/main 二. 具体步骤: git clone gitgithub.com:mapbox/mapbox-navigation-android-examples.git Go to app/src/main/res/values Look for mapbox_access_token.…

[R] Underline your idea with ggplot2

Preview: # 介绍:之前的教程中,我们学习了如何使条形图或直方图看起来更好 比如: 1. How to select a graph calibrate the geom part 2. How to select variables calibrate the aes part 3. How to add a title calibrate the labs …

Golang各版本的GC详解

go v1.3的标记清除法 清除的第一步:stw将可达对象标记删除未被标记对象 go v1.5三色标记法 从根节点出发,将下一个节点遍历为灰色,放入灰色集合中遍历灰色节点集合,把灰色能到达的节点标记为灰色,把自身标记为黑色&a…

安全增强型 Linux

书接上篇 一查看selinux状态 SELinux的状态: enforcing:强制,每个受限的进程都必然受限 permissive:允许,每个受限的进程违规操作不会被禁止,但会被记录于审计日志 disabled:禁用 相关命令…

SystemVerilog Support

介绍 AMD Vivado™合成支持可以合成的SystemVerilog RTL的子集。这个以下部分介绍了这些数据类型。 针对特定文件的SystemVerilog 默认情况下,Vivado合成工具使用Verilog 2005语法编译*.v文件和*.sv文件使用SystemVerilog语法。要在Vivado IDE中将SystemVerilog作…

**蓝桥OJ 178全球变暖 DFS

蓝桥OJ 178全球变暖 思路: 将每一座岛屿用一个颜色scc代替, 用dx[]和dy[]判断他的上下左右是否需要标记颜色,如果已经标记过颜色或者是海洋就跳过.后面的淹没,实际上就是哪个块上下左右有陆地,那么就不会被淹没,我用一个tag标记,如果上下左右一旦有海洋,tag就变为false.如果tag…