zoukankan      html  css  js  c++  java
  • jieba分词

    jieba分词

    jieba分词是python写成的一个算是工业界的分词开源库,其github地址为:https://github.com/fxsjy/jieba,在Python里的安装方式: pip install jieba

    简单示例:

    import jieba as jb
    
    seg_list = jb.cut("我来到北京清华大学", cut_all=True)
    print("全模式: " + "/ ".join(seg_list))  # 全模式
    
    seg_list = jb.cut("我来到北京清华大学", cut_all=False)
    print("精确模式: " + "/ ".join(seg_list))  # 精确模式
    
    seg_list = jb.cut("他来到了网易杭研大厦")  
    print("默认模式: " + "/ ".join(seg_list)) # 默认是精确模式
    
    seg_list = jb.cut_for_search("小明硕士毕业于中国科学院计算所,后在日本京都大学深造")  
    print("搜索引擎模式: " + "/ ".join(seg_list)) # 搜索引擎模式

    执行结果:

    全模式: 我/ 来到/ 北京/ 清华/ 清华大学/ 华大/ 大学
    精确模式: 我/ 来到/ 北京/ 清华大学
    默认模式: 他/ 来到/ 了/ 网易/ 杭研/ 大厦
    搜索引擎模式: 小明/ 硕士/ 毕业/ 于/ 中国/ 科学/ 学院/ 科学院/ 中国科学院/ 计算/ 计算所/ ,/ 后/ 在/ 日本/ 京都/ 大学/ 日本京都大学/ 深造

    jieba分词的基本思路

    jieba分词对已收录词和未收录词都有相应的算法进行处理,其处理的思路很简单,主要的处理思路如下:

    • 加载词典dict.txt
    • 从内存的词典中构建该句子的DAG(有向无环图)
    • 对于词典中未收录词,使用HMM模型的viterbi算法尝试分词处理
    • 已收录词和未收录词全部分词完毕后,使用dp寻找DAG的最大概率路径 输出分词结果

    案例:

    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    
    import jieba
    import requests
    from bs4 import BeautifulSoup
    
    def extract_text(url):
        # 发送url请求并获取响应文件
        page_source = requests.get(url).content
        bs_source = BeautifulSoup(page_source, "lxml")
    
        # 解析出所有的p标签
        report_text = bs_source.find_all('p')
    
        text = ''
        # 将p标签里的所有内容都保存到一个字符串里
        for p in report_text:
            text += p.get_text()
            text += '
    '
    
        return text
    
    def word_frequency(text):
        from collections import Counter
        # 返回所有分词后长度大于等于2 的词的列表
        words = [word for word in jieba.cut(text, cut_all=True) if len(word) >= 2]
    
        # Counter是一个简单的计数器,统计字符出现的个数
        # 分词后的列表将被转化为字典
        c = Counter(words)
    
        for word_freq in c.most_common(10):
            word, freq = word_freq
            print(word, freq)
    
    if __name__ == "__main__":
        url = 'http://www.gov.cn/premier/2017-03/16/content_5177940.htm'
        text = extract_text(url)
        word_frequency(text)

    执行结果:

    Building prefix dict from the default dictionary ...
    Loading model from cache /var/folders/dp/wxmmld_s7k9gk_5fbhdcr2y00000gn/T/jieba.cache
    Loading model cost 0.843 seconds.
    Prefix dict has been built succesfully.
    发展 134
    改革 85
    经济 71
    推进 66
    建设 59
    社会 49
    人民 47
    企业 46
    加强 46
    政策 46
    流程介绍
    1. 首先,我们从网上抓取政府工作报告的全文。我将这个步骤封装在一个名叫extract_text的简单函数中,接受url作为参数。因为目标页面中报告的文本在所有的p元素中,所以我们只需要通过BeautifulSoup选中全部的p元素即可,最后返回一个包含了报告正文的字符串。

    2. 然后,我们就可以利用jieba进行分词了。这里,我们要选择全模式分词。jieba的全模式分词,即把句子中所有的可以成词的词语都扫描出来, 速度非常快,但是不能解决歧义。之所以这么做,是因为默认的精确模式下,返回的词频数据不准确。

    3. 分词时,还要注意去除标点符号,由于标点符号的长度都是1,所以我们添加一个len(word) >= 2的条件即可。

    4. 最后,我们就可以利用Counter类,将分词后的列表快速地转化为字典,其中的键值就是键的出现次数,也就是这个词在全文中出现的次数。

  • 相关阅读:
    莫比乌斯反演套路一--令t=pd--BZOJ2820: YY的GCD
    BZOJ2720: [Violet 5]列队春游
    BZOJ2277: [Poi2011]Strongbox
    莫(meng)比(bi)乌斯反演--BZOJ2301: [HAOI2011]Problem b
    「CodePlus 2017 11 月赛」Yazid 的新生舞会
    「CodePlus 2017 11 月赛」大吉大利,晚上吃鸡!
    用NumGo实现安卓动画
    人生
    用NumGo实现安卓动画
    html5使用canvas绘制n角星
  • 原文地址:https://www.cnblogs.com/alexzhang92/p/9794406.html
Copyright © 2011-2022 走看看