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类,将分词后的列表快速地转化为字典,其中的键值就是键的出现次数,也就是这个词在全文中出现的次数。

  • 相关阅读:
    向Sql Server数据库插入中文时显示乱码的解决办法 (转)
    自定义控件开发知识点
    Win7旗舰版中的IIS配置asp.net的运行环境
    windows使用
    Visual Studio 2012自动添加注释(如版权信息等)
    3个线程彼此通知
    多线程12_张孝祥 java5读写锁技术的妙用
    多线程11_张孝祥 java5的线程锁技术
    Spring整合hibernate4:事务管理[转]
    HTML界面JQuery ajax 返回200,但走Error方法
  • 原文地址:https://www.cnblogs.com/alexzhang92/p/9794406.html
Copyright © 2011-2022 走看看