• pandas之中文分词,词云,情感分析,语义分析2


    抽取文档关键词

    抽取文档关键词用于在一篇文章中获取其核心内容(描述了什么?),又叫 生成摘要、打标签、关键词提取等

    1:词频统计

    • 词在文本中出现的次数(频次),某种程度上能当做文本的标签,表示文本内容
    • 不是很精准
    • 统计前最好先去完成自定义词典和去停用词的前期操作
    略过自定义词典、去停用词
    a = '哎,詹姆斯,听说你超级喜欢玩篮球的!你是吗?哎,詹姆斯'
    x = jieba.lcut(a)
    pd.DataFrame(x)
    pd.DataFrame(x).groupby(0).size().sort_values(ascending=False)
    pd.Series(x).value_counts()
    

    案例:分析Python互联网招聘信息中的需求关键字

    # 载入文本数据
    with open('data/work.txt', 'r', encoding='utf-8') as f:
        txt = f.read()
    print(txt)
    职位描述:
    
    岗位职责:
    负责公司互联网产品的编码、实施等工作。
    
    任职要求:
    1、大专及以上学历,3年python开发经验,1年以上大型服务器端开发经验。
    2、有良好的编码习惯,熟悉git代码管理工具。
    3、熟练在Linux各发行版下进行开发,熟练使用vim、Sublime、eclipse等文本编辑器或IDE工具进行程序开发。
    4、至少熟练使用Django、Flask、Web.py、Tornado等Web框架中的一种。
    5、熟练运用MySQL、Oracle、Postgresql中的一项或多项进行数据库开发。
    6、熟悉和具有MongoDB、Redis、memecached等NoSQL数据库开发经验者优先。
    7、熟悉RESTFul风格、Oauth协议、MQTT协议等框架或技术者优先。
    8、具有大规模高并发访问Web应用架构设计和开发经验者优先。
    9、对代码有追求, 有分享精神者优先。
    
    ===========
    
    职能类别:
    软件工程师互联网软件开发工程师
    关键字:python
    职位描述:
    主要工作职责:
    1、基于Linux的应用软件开发,物联网应用方向(工业自动化、智能楼宇、远程监控等);
    2、参与需求分析、系统架构设计;
    3、根据设计文档或需求说明完成代码编写、调试和维护;
    4、协助配合其他人员实现系统在实际环境的可靠运行。
    
    —————
    
    职位要求:
    1、扎实的C++基础,具备OOP编程思想,精通Python语言,熟悉多线程应用开发;
    2、有linux应用项目开发经历(包括服务端、网络通讯、web等);
    3、熟悉数据库及SQL,有MySQL等关系型数据库开发经验
    4、良好的团队合作精神,有责任感;
    

     

    方式1:使用词频方式提取关键词

    # 1:自定义词典
    jieba.load_userdict('data/custom.txt')  # 应用自定义词典
    # 2:分词
    cut = jieba.lcut(txt)
    # 3:去停用词
    # 3.1,载入停用词表
    stopword = []
    with open('data/stopword.txt', 'r', encoding='utf-8') as f:
        for line in f.readlines():
            l = line.strip()
            if l == '\n':
                l = '
    '
            if l == '\u3000':
                l = 'u3000'
    
            stopword.append(l)
    stopword
    
    #3.2 去停用词,第一步,求差集
    x = np.array(cut)  # 将分好的词列表转为数组
    y = np.array(stopword)  # 将停用词转为数组
    z = x[~np.in1d(x, y)]  # x的元素是否包含于y
    # 去掉一个字的词
    k = [i for i in z if len(i) > 1]
    
    # 4:计算词频并排序
    result = pd.Series(k).value_counts()[:20]
    result
    
    # 5: 保存结果
    result.to_csv('temp/keyword_fig.csv', header=0)
    
    统计词频作为文档关键字的准确性不高,还可使用下面的方式
    
    TF-IDF算法
    Text-Rank算法
    注:TF-IDF和Text-Rank算法运行都不需要手动去停用词,可以用内置函数自动去停用词
    

    使用TF-IDF权重算法提取关键词

    TF-IDF权重:

    词频和重要词的综合分数(权重)

    重要词:信息量大的词

    一个词信息量大小的衡量
    
    在本文章出现的次数多,在通用文档库出现的次数少,就是重要词
    
    如:你我他,你好再见 这些词信息量很小
    行业专有名词,如Python/MySQL,信息量就很大
    • 首先,应用自定义词典
    • 然后,去除停用词,系统自带,给抽取关键字用 
    jieba.load_userdict('data/custom.txt')  # 应用自定义词典
    jieba.analyse.set_stop_words('data/stopword.txt') # 抽取关键词前去掉自定义停用词
    
    # 详细参数:
    # 字符串
    # 返回多少关键词,默认20个
    # 是否返回TF-IDF权重
    # allowPOS=(),什么词性可以做抽取,默认所有词
    k = jieba.analyse.extract_tags(txt, topK=50, withWeight=True)
    

    Text-Rank算法

    TextRank是在Google的PageRank算法启发下,针对文本里的句子设计的权重算法,目标是自动摘要。

    它利用投票的原理,让每一个单词给它的邻居(术语称窗口)投赞成票,票的权重取决于自己的票数。

    效果比词频统计精准,和TF-IDF比各有千秋

    jieba.load_userdict('data/custom.txt')  # 应用自定义词典
    jieba.analyse.set_stop_words('data/stopword.txt') # 抽取关键词前去掉自定义停用词
    # 文本
    # 显示多少词
    # 是否返回关键字权重
    # allowPOS=(),什么词性可以做抽取,默认所有词
    t = jieba.analyse.textrank(txt, topK=50, withWeight=True, allowPOS=('ns', 'n', 'vn', 'v'))
    
    附:词性标注
    后附词性表
    list(jieba.posseg.cut(a))
    

     


    中科院ICTCLAS分词汉语词性标记集

    1. 名词 (1个一类,7个二类,5个三类)
    名词分为以下子类:
    
    n 名词
    
    nr 人名
    
    nr1 汉语姓氏
    
    nr2 汉语名字
    
    nrj 日语人名
    
    nrf 音译人名
    
    ns 地名
    
    nsf 音译地名
    
    nt 机构团体名
    
    nz 其它专名
    
    nl 名词性惯用语
    
    ng 名词性语素
    
    2. 时间词(1个一类,1个二类)
    t 时间词
    
    tg 时间词性语素
    
    3. 处所词(1个一类)
    s 处所词
    
    4. 方位词(1个一类)
    f 方位词
    
    5. 动词(1个一类,9个二类)
    v 动词
    
    vd 副动词
    
    vn 名动词
    
    vshi 动词“是”
    
    vyou 动词“有”
    
    vf 趋向动词
    
    vx 形式动词
    
    vi 不及物动词(内动词)
    
    vl 动词性惯用语
    
    vg 动词性语素
    
    6. 形容词(1个一类,4个二类)
    a 形容词
    
    ad 副形词
    
    an 名形词
    
    ag 形容词性语素
    
    al 形容词性惯用语
    
    7. 区别词(1个一类,2个二类)
    b 区别词
    
    bl 区别词性惯用语
    
    8. 状态词(1个一类)
    z 状态词
    
    9. 代词(1个一类,4个二类,6个三类)
    r 代词
    
    rr 人称代词
    
    rz 指示代词
    
    rzt 时间指示代词
    
    rzs 处所指示代词
    
    rzv 谓词性指示代词
    
    ry 疑问代词
    
    ryt 时间疑问代词
    
    rys 处所疑问代词
    
    ryv 谓词性疑问代词
    
    rg 代词性语素
    
    10. 数词(1个一类,1个二类)
    m 数词
    
    mq 数量词
    
    11. 量词(1个一类,2个二类)
    q 量词
    
    qv 动量词
    
    qt 时量词
    
    12. 副词(1个一类)
    d 副词
    
    13. 介词(1个一类,2个二类)
    p 介词
    
    pba 介词“把”
    
    pbei 介词“被”
    
    14. 连词(1个一类,1个二类)
    c 连词
    
    cc 并列连词
    
    15. 助词(1个一类,15个二类)
    u 助词
    
    uzhe 着
    
    ule 了 喽
    
    uguo 过
    
    ude1 的 底
    
    ude2 地
    
    ude3 得
    
    usuo 所
    
    udeng 等 等等 云云
    
    uyy 一样 一般 似的 般
    
    udh 的话
    
    uls 来讲 来说 而言 说来
    
    uzhi 之
    
    ulian 连 (“连小学生都会”)
    
    16. 叹词(1个一类)
    e 叹词
    
    17. 语气词(1个一类)
    y 语气词(delete yg)
    
    18. 拟声词(1个一类)
    o 拟声词
    
    19. 前缀(1个一类)
    h 前缀
    
    20. 后缀(1个一类)
    k 后缀
    
    21. 字符串(1个一类,2个二类)
    x 字符串
    
    xx 非语素字
    
    xu 网址URL
    
    22. 标点符号(1个一类,16个二类)
    w 标点符号
    
    wkz 左括号,全角:( 〔 [ { 《 【 〖 〈 半角:( [ { <
    
    wky 右括号,全角:) 〕 ] } 》 】 〗 〉 半角: ) ] { >
    
    wyz 左引号,全角:“ ‘ 『
    
    wyy 右引号,全角:” ’ 』
    
    wj 句号,全角:。
    
    ww 问号,全角:? 半角:?
    
    wt 叹号,全角:! 半角:!
    
    wd 逗号,全角:, 半角:,
    
    wf 分号,全角:; 半角: ;
    
    wn 顿号,全角:、
    
    wm 冒号,全角:: 半角: :
    
    ws 省略号,全角:…… …
    
    wp 破折号,全角:—— -- ——- 半角:--- ----
    
    wb 百分号千分号,全角:% ‰ 半角:%
    
    wh 单位符号,全角:¥ $ £ ° ℃ 半角:$

     

      

     

      

    本文为原创文章,转载请标明出处
  • 相关阅读:
    Leetcode951. Flip Equivalent Binary Trees翻转等价二叉树
    Leetcode938. Range Sum of BST二叉搜索树的范围和
    Leetcode962. Maximum Width最大宽度坡 Ramp
    STL容器-deque-双端队列
    Leetcode950. Reveal Cards In Increasing Order按递增顺序显示卡牌
    idea修改运行内存
    Web服务器进程连接数和请求连接数
    Vue问题总结
    Vue项目搭建过程
    去掉vue 中的代码规范检测(Eslint验证)
  • 原文地址:https://www.cnblogs.com/harden13/p/13763861.html
Copyright © 2020-2023  润新知