Python 分词及词云绘图

支持三种分词模式:
精确模式,试图将句子最精确地切开,适合文本分析;
全模式,把句子中所有的可以成词的词语都扫描出来, 速度非常快,但是不能解决歧义;
搜索引擎模式,在精确模式的基础上,对长词再次切分,提高召回率,适合用于搜索引擎分词。

关键词:HMM 隐马尔可夫模型

三种分词模式:

# -*- coding: utf-8 -*-
import jieba
#jieba.initialize()

seg_list = jieba.cut("中华人民共和国万岁!", cut_all=False) #精确模式(默认)
print(" | ".join(seg_list))

seg_list = jieba.cut("中华人民共和国万岁!", cut_all=True)  #全模式
print(" | ".join(seg_list)) 

seg_list = jieba.cut_for_search("中华人民共和国万岁!")     #搜索引擎模式
print(" | ".join(seg_list))

结果:
中华人民共和国 | 万岁 | !
中华 | 中华人民 | 中华人民共和国 | 华人 | 人民 | 人民共和国 | 共和 | 共和国 | 万岁 |  |
中华 | 华人 | 人民 | 共和 | 共和国 | 中华人民共和国 | 万岁 | !

结果可以直接保持为 list

seg_list = jieba.cut("中华人民共和国万岁!") #默认精确模式
print(seg_list) #此返回生成器

seg_list = jieba.lcut("中华人民共和国万岁!")
print(seg_list)

seg_list = jieba.lcut_for_search ("中华人民共和国万岁!")
print(seg_list)

结果:
<generator object Tokenizer.cut at 0x0000000003972150>
[‘中华人民共和国‘, ‘万岁‘, ‘!‘]
[‘中华‘, ‘华人‘, ‘人民‘, ‘共和‘, ‘共和国‘, ‘中华人民共和国‘, ‘万岁‘, ‘!‘]

【自定义分词字典(属额外添加)】
默认分词器为 jieba.dt。可使用自定义字典,添加词库中没有的词,文本必须为 UTF-8 编码。词典格式和 dict.txt 一样,一个词占一行;每一行分三部分:词语、词频(可省略)、词性(可省略),用空格隔开。

测试文件 dict.txt 中,我只添加一个单词 "和国":

jieba.load_userdict("C:/Users/huangzecheng/Desktop/dict.txt") 

seg_list = jieba.cut("中华人民共和国万岁!", cut_all=True)#如全模式
print(" | ".join(seg_list)) 

结果:
中华 | 中华人民 | 中华人民共和国 | 华人 | 人民 | 人民共和国 | 共和 | 共和国 | 和国 | 万岁 |  |

【添加删除分词】
加载的自定义词典,是与默认的一起定义分词的。也可以使用几个函数添加、删除、禁止某个词被划分。
add_word(word, freq=None, tag=None)
del_word(word) 
suggest_freq(segment, tune=True)

jieba.add_word(‘中华人‘)
print(" | ".join(jieba.cut("中华人民共和国万岁!", cut_all=True)))
结果:中华 | 中华人 | 中华人民 | 中华人民共和国 | 华人 | 人民 | 人民共和国 | 共和 | 共和国 | 和国 | 万岁 |  |

jieba.del_word(‘共和‘)
print(" | ".join(jieba.cut("中华人民共和国万岁!", cut_all=True)))
结果:中华 | 中华人 | 中华人民 | 中华人民共和国 | 华人 | 人民 | 人民共和国 | 共和国 | 和国 | 万岁 |  |

jieba.add_word(‘共和‘)
jieba.suggest_freq(‘国万岁‘, tune=True)
print(" | ".join(jieba.cut("中华人民共和国万岁!", cut_all=True)))
结果:中华 | 中华人 | 中华人民 | 中华人民共和国 | 华人 | 人民 | 人民共和国 | 共和国 | 和国 | 国万岁 | 万岁 |  |

【使用最多的分词】
import jieba.analyse
jieba.analyse.extract_tags(sentence, topK=20, withWeight=False, allowPOS=())
sentence :为待提取的文本
topK :为返回几个 TF/IDF 权重最大的关键词,默认值为 20
withWeight :为是否一并返回关键词权重值,默认值为 False
allowPOS :仅包括指定词性的词,默认值为空,即不筛选

测试:去文本中出现次数最多的前5个字符

str = "topK 为返回几个 TF/IDF 权重最大的关键词,默认值为 20;"
str = str + "withWeight 为是否一并返回关键词权重值,默认值为 False"
str = str + "allowPOS 仅包括指定词性的词,默认值为空,即不筛选"
str = str + "jieba.analyse.TFIDF(idf_path=None) 新建 TFIDF 实例,idf_path 为 IDF 频率文件"
tags = jieba.analyse.extract_tags(str, topK=5)
print(" | ".join(tags))
结果:默认值 | TFIDF | idf | IDF | path

上面说过字典有3部分组成:词语、词频(可省略)、词性(可省略)。textrank可运行过滤不同词性。
jieba.analyse.textrank(sentence, topK=20, withWeight=False, allowPOS=(‘ns‘, ‘n‘, ‘vn‘, ‘v‘))

tags = jieba.analyse.textrank(str, topK=5, withWeight=False, allowPOS=(‘ns‘, ‘n‘, ‘vn‘, ‘v‘))
print(" | ".join(tags))
结果:权重 | 关键词 | 词性 | 频率 | 新建

【取分词及词性】

words = jieba.posseg.cut("中华人民共和国万岁!")
for word, flag in words:
    print(‘%s %s‘ % (word, flag))

结果:
中华人民共和国 ns
万岁 m
! x

【取分词及起止位置】

words = jieba.tokenize("中华人民共和国万岁!")
for w in words:
    print("word %s\t\t start: %d \t\t end:%d" % (w[0],w[1],w[2]))

结果:
word 中华人民共和国      start: 0         end:7
word 万岁                start: 7         end:9
word !                  start: 9         end:10
words = jieba.tokenize("中华人民共和国万岁!", mode=‘search‘) #搜索模式
for w in words:
    print("word %s\t\t start: %d \t\t end:%d" % (w[0],w[1],w[2]))

结果:
word 中华                start: 0                end:2
word 华人                start: 1                end:3
word 人民                start: 2                end:4
word 共和                start: 4                end:6
word 共和国              start: 4                end:7
word 中华人民共和国      start: 0                end:7
word 万岁                start: 7                end:9
word !                  start: 9                end:10

简单示例:从 sql server 数据库中读取某个文本字段,分词并自定义绘图

# -*- coding: utf-8 -*-

import pymssql
import jieba
import jieba.analyse
import matplotlib.pyplot as plt
from wordcloud import WordCloud
from scipy.misc import imread

host = "localhost"
user = "kk"
passwd = "kk"
dbname = "hzc"
conn = None

try:
    conn = pymssql.connect(
        host = host,
        user = user,
        password = passwd,
        database = dbname
        )
    cur = conn.cursor()
    cur.execute("select col from jieba;")
    rows = cur.fetchall()
    tagsall=u""
    #tagsall = open(‘filepath.txt‘,‘r‘).read()
    for row in rows:
        tags = jieba.analyse.extract_tags(row[0], topK=20)
        tagsjoin = u" ".join(tags)
        tagsall = tagsall + " " + tagsjoin
        #print(tagsjoin)

    #http://labfile.oss.aliyuncs.com/courses/756/DroidSansFallbackFull.ttf
    wc_cfg = WordCloud(
        font_path="D:/Python35/Tools/whl/DroidSansFallbackFull.ttf",#字体
        mask= imread("D:/Python35/Tools/whl/bg.png"),#背景模板(只黑白图,黑的显示)
        background_color="white", #背景色
        max_words=1000,     #最大词量
        mode="RGBA",        #透明底色(background_color不为空).默认rgb
        width=500,          #宽度
        height=400,         #高度
        max_font_size=100   #字体大小
    )
    wc = wc_cfg.generate(tagsall)
    plt.imshow(wc)
    plt.axis("off")
    plt.show()
finally:
    if conn:
        conn.close()

原文地址:https://www.cnblogs.com/hzc2012/p/8277826.html

时间: 2024-10-27 23:00:51

Python 分词及词云绘图的相关文章

Studio 爬虫 文本分词 化词云个性化设计

Studio 爬虫 文本分词 化词云个性化设计 分析步骤 设置工作目录 下载依赖包 加载依赖包 设置爬虫数据的URL地址 爬取数据 数据清洗 产看数据 制作词云 加载停用词表 去掉停用词 查看数据 生成Top100 词云 生成完整词云 个性化设计 setwd() install.packages("rjava") install.packages("wordcound") install.packages("wordcound2") librar

结巴分词与词云,简单爬虫——10.28 (python)

 bilibili弹幕词云 美国历史词云 结巴分词       import jieba txt=" **** " 精确模式:                                全模式:                                                               搜索模式: res = jieba.cut(txt)                     res =jieba.cut(txt ,cut_all=True)   

python 在线生成词云

效果图 大体步骤 1 接收请求中的文本,通过结巴分词处理文本. seg_generator = jieba.cut(text) # 使用结巴分词,也可以不使用 stopwords = pd.read_csv( path +"/stop_words_zh_UTF-8.txt", index_col=False, quoting=3, sep="\t", names=['stopword'], encoding='utf-8') # quoting=3全不引用 seg_

Python 生成中文词云

豆子无意中发现Python有个现成的模块 word cloud可以根据文本文件生成词云,很好很强大,简单地玩了一把. 写代码之前,首先需要安装3个依赖的Python模块,分别是matplotlib, jieba和wordcloud.这三个模块分别是用来作图,中文分词和生成词云的.安装方式可以直接通过 pip install实现.如果在线安装出现报错(很有可能的事情),那么可以去https://www.lfd.uci.edu/~gohlke/pythonlibs/ 下载对应版本和位数的whl文件,

用Python玩转词云

第一步:引入相关的库包: #coding:utf-8 __author__ = 'Administrator' import jieba #分词包 import numpy #numpy计算包 import codecs #codecs提供的open方法来指定打开的文件的语言编码,它会在读取的时候自动转换为内部unicode import pandas import matplotlib.pyplot as plt %matplotlib inline from wordcloud import

如何用Python做词云(收藏)

看过之后你有什么感觉?想不想自己做一张出来? 如果你的答案是肯定的,我们就不要拖延了,今天就来一步步从零开始做个词云分析图.当然,做为基础的词云图,肯定比不上刚才那两张信息图酷炫.不过不要紧,好的开始是成功的一半嘛.食髓知味,后面你就可以自己升级技能,进入你开挂的成功之路. 网上教你做信息图的教程很多.许多都是利用了专用工具.这些工具好是好,便捷而强大.只是它们功能都太过专一,适用范围有限.今天我们要尝试的,是用通用的编程语言Python来做词云. Python是一种时下很流行的编程语言.你不仅

使用Python定制词云

一.实验介绍 1.1 实验内容 在互联网时代,人们获取信息的途径多种多样,大量的信息涌入到人们的视线中.如何从浩如烟海的信息中提炼出关键信息,滤除垃圾信息,一直是现代人关注的问题.在这个信息爆炸的时代,我们每时每刻都要更新自己的知识储备,而网络是最好的学习平台.对信息过滤和处理能力强,学习效率就会得到提高."词云"就是为此而诞生的."词云"是对网络文本中出现频率较高的"关键词"予以视觉上的突出,形成"关键词云层"或"

jieba分词与worldcloud词云

中文分词的优秀库. 安装:pip install jieba 主要有三种模式,但是最主要有一个函数 模式:精确模式:把文本精确的切分开,不存在冗余单词 全模式:把文本中所有可能的词语都扫描出来,有冗余 搜索引擎模式:在精确模式上,对长词再次切分 函数:jieba.lcut(str):精确模式,返回一个列表 jieba.lcut(str,cut_all=True):就变成全模式,存在冗余 jieba.lcut_for_search(str):搜索引擎模式,返回列表,有冗余 jieba.add_wo

将QQ聊天记录创建为词云

1. 导出并清洗qq聊天记录 将qq聊天记录从电脑版qq导出 去掉聊天中的图片表情以及时间戳 具体代码如下: def Pretreatment(): with open("未处理的聊天记录文件路径","r") as readfile: with open("处理后的聊天记录文件路径","at") as writefile: while True: line = readfile.readline() if line is ''