分词练习2——分词体验

分词练习1——分词工具包

分词效果尝试

接下来我将体验NLPIR和jieba分词的效果,其中,NLPIR使用在线演示,jieba由于其体验网站出错故使用代码。

(1)NLPIR

进入在线演示系统,输入网址抓取后可以在方框内得到相应文字,这里我们以公共管理学院的新闻——认真贯彻落实十九大精神 我院积极开展调研工作为例展开分词体验。(这里抓取的是网页内的所有文本,即包括导航栏文本和底部信息等,我手动将那些删掉了,留下了新闻主体)输入网址后点击开始分析。

语义分析系统.png

网页采集.png

  • 分词标注:
    对文本进行分词,并将出现的字词进行词性标注(如名词、形容词、动词等)

    分词标注.png

  • 实体抽取:

识别出文本中出现的专有名称和有意义的数量短语并进行分类,主要包括实体(组织名,人名,地名)、时间表达式(日期、时间)和数字表达式(货币值、百分数等)

实体抽取.png
  • 词频统计:
    分词后将每类词性下出现的词语进行频数统计

    词频统计.png

  • 文本分类:
    根据文本中截取到的词语进行分析,得出该文本描述的内容的类别

    文本分类.png

  • 情感分析:

情感分析(SA)又称为倾向性分析和意见挖掘,它是对带有情感色彩的主观性文本进行分析、处理、归纳和推理的过程,其中情感分析还可以细分为情感极性(倾向)分析,情感程度分析,主客观分析等。

情感极性分析的目的是对文本进行褒义、贬义、中性的进行判断。

情感分析.png
  • 关键词提取:
    根据对文本中提取到的词语的统计得出的一些使用次数较多的关键词,并根据出现次数的多少决定字号大小,方便抓取重要词汇

    关键词提取.png

    (有一点不明白的是每刷新一次这个图就会变一次)

  • Word2vec:

也叫word embeddings,中文名“词向量”,作用就是将自然语言中的字词转为计算机可以理解的稠密向量(Dense Vector)。

(虽然这么说了但是我也还是不是很能理解,有兴趣的童鞋可以自行查找一下相关资料。比如说我就不是很明白为什么这里会出现清华大学,不过我猜测可能是NLPIR自己进行分词统计后得出的和本篇文本相关的词汇)


Word2vec.png
  • 依存文法:

通过分析语言单位内成分之间的依存关系揭示其句法结构。 直观来讲,依存句法分析识别句子中的“主谓宾”、“定状补”这些语法成分,并分析各成分之间的关系

依存文法.png
  • 地图可视化:
    将文本中涉及到的位置显示到地图上
    地图可视化.png
  • 敏感词:
    这个的含义没有查到,我猜测大概是针对文本中可能存在的敏感词进行检测
    敏感词.png
  • 摘要提取:
    对文本内容的精简提炼
    摘要提取.png

以上即为本次使用NLPIR分词的过程。

(2)jieba分词

关于jieba的使用,我是在云服务器上完成的,而我们的云服务器已经由另一个组员安装好了jieba,所以我这里也不赘述安装过程,想知道的同学可以自己看看,也不是很复杂。
以下代码参考jieba在GitHub上的demo学习使用Jieba
我先在本地电脑上新建了一个jieba_test.txt文件(内容同上面的新闻一样),然后通过Xftp上传到云服务器的/jieba文件夹中。

jieba_test.txt.png

命令行分词
输入命令:(要注意当前是否处在txt文件所在目录下)

python -m jieba jieba_test.txt

结果如下:


命令行分词.png

可以看到,文本中的“十九大”被切分成了“十九”和“大”;“图情档”被切分成“图情”和“档”;“公共管理大类”被切分成了“公共”、“管理”、“大”和“类”;“史云贵”(院长名)被切分成了“史”和“云贵”。这些问题来源于这些词并不存在于jieba的词典中,而且其出现频率的大小也会造成影响,比如“十九”出现的频率会高于“十九大”的频率,所以会导致在分词时会被切分成两部分。

通过文件代码分词并添加词典
接下来添加并引用自定义词典收录上述词语:
添加用户自定义词典:

用法: jieba.load_userdict(file_name) # file_name 为文件类对象或自定义词典的路径
词典格式和 dict.txt 一样,一个词占一行;每一行分三部分:词语、词频(可省略)、词性(可省略),用空格隔开,顺序不可颠倒。file_name 若为路径或二进制方式打开的文件,则文件必须为 UTF-8 编码。

我添加的词典如下图所示:


self_dict.txt.png

代码如下:(dict.py)

#! /usr/bin/python3
# -*- coding: utf-8 -*-

import jieba

#读取txt文档内容
file_object = open('jieba_test.txt')
file_content = file_object.read()
file_object.close()

jieba.load_userdict("self_dict.txt")        #引用用户的自定义词典
words = jieba.cut(file_content)         #对内容进行分词
print('/'.join(words))                      #输出分词结果

上传后使用./dict.py运行,报错如下图:


没有权限.png

此时可通过代码:

chmod 755 ./dict.py

来修改权限。修改成功后文件名会变成绿色,如下图所示:


纠正错误1.png

完毕后运行时又遇到另一报错:


不同系统的编码格式转换错误.png

修改方法为:
[wenny673@VM_0_8_centos jieba]$ vi dict.py
:set ff=unix
:x

保存退出后若是不放心可以再执行一遍vi dict.py然后输入:set ff查看,:set ff=unix时即为成功。
(纠错方法参考终端直接执行py文件,不需要python命令python报/usr/bin/python^M: bad interpreter: No such file or directory
再次执行dict.py文件,成功运行并得到下图结果:

添加词典后的运行结果.png

可以看到此时“十九大”、“公共管理大类”和“史云贵”三个词已经不会再被切分了。
另一种方式为直接在程序里进行分词调整:

使用 add_word(word, freq=None, tag=None) 和 del_word(word) 可在程序中动态修改词典。
使用 suggest_freq(segment, tune=True) 可调节单个词语的词频,使其能(或不能)被分出来。
注意:自动计算的词频在使用 HMM 新词发现功能时可能无效。

代码如下:

#! /usr/bin/python3
# -*- coding: utf-8 -*-

import jieba

file_object = open('jieba_test.txt')
file_content = file_object.read()
file_object.close()

jieba.add_word('十九大')       #通过add_word在程序中动态修改词典
jieba.add_word('公共管理大类')
jieba.del_word('史云贵')
words=jieba.cut(file_content)
print("/".join(words))

此时也可以获得和上图相同的结果

提取关键词

import jieba.analyse
jieba.analyse.extract_tags(sentence, topK=20, withWeight=False, allowPOS=())
sentence 为待提取的文本
topK 为返回几个 TF/IDF 权重最大的关键词,默认值为 20
withWeight 为是否一并返回关键词权重值,默认值为 False
allowPOS 仅包括指定词性的词,默认值为空,即不筛选
jieba.analyse.TFIDF(idf_path=None) 新建 TFIDF 实例,idf_path 为 IDF 频率文件

代码参考基于TF-IDF的关键词提取学习使用Jieba
代码如下:

#! /usr/bin/python3
# -*- coding: utf-8 -*-

import jieba
import jieba.analyse

content = open('jieba_test.txt', 'rb').read()

tags = jieba.analyse.extract_tags(content, topK=10)

print(",".join(tags))

提取结果为:


关键词提取结果1.png

另一种提取方式:(test.py)

#! /usr/bin/python3
# -*- coding: utf-8 -*-

import sys
sys.path.append('../')

import jieba
import jieba.analyse
from optparse import OptionParser

USAGE = "usage:    python test.py [file name] -k [top k]"

parser = OptionParser(USAGE)
parser.add_option("-k", dest="topK")
opt, args = parser.parse_args()


if len(args) < 1:
    print(USAGE)
    sys.exit(1)

file_name = args[0]

if opt.topK is None:
    topK = 10
else:
    topK = int(opt.topK)

content = open(file_name, 'rb').read()

tags = jieba.analyse.extract_tags(content, topK=topK)

print(",".join(tags))

此时在命令行输入

python test.py jieba_test.txt -k 15

可得结果如下:

关键词提取结果2.png

基于 TextRank 算法的关键词抽取

tags = jieba.analyse.extract_tags(content, topK=topK)

换为

tags=jieba.analyse.textrank(content,topK=topK)

即可。
在命令行输入

python test.py jieba_test.txt -k 15

结果为:


关键词提取结果3.png

词云生成
代码来自学习使用Jieba,参照Python + wordcloud + jieba 十分钟学会用任意中文文本生成词云稍作改动。
绘制词云图要用到matplotlib包,请先确保自己的python里已经安装好了这个(我在这里栽了好久)。主要安装方法为

pip install matplotlib

运气好的一般一次就能成功了,但是像我这种比较惨的就是依赖缺了一个又一个(其实就两个),分别是bz2和tkinter,解决方法见python: ImportError: No module named bz2python解决 ModuleNotFoundError: No module named '_bz2'【求助】centos7上安装Python3缺失tkinter

运行generate.py时会出现报错如下:

_tkinter.TclError: no display name and no $DISPLAY environment variable

这时候只要在代码的起始处添加

import matplotlib  
matplotlib.use('Agg')  

就ok了。下面是generate_wc.py的详细代码:

#! /usr/bin/python3
# -*- coding: utf-8 -*-


import os
from os import path
import matplotlib
# Force matplotlib to not use any Xwindows backend.
matplotlib.use('Agg')
import jieba
import jieba.analyse
from PIL import Image, ImageSequence
import numpy as np
import matplotlib.pyplot as plt
from wordcloud import WordCloud, ImageColorGenerator
import random

d = path.dirname('.')          # 获取当前文件路径
def load_data(file_path):
    '''
    输入文件路径,返回文件内容
    '''
    try:
        with open(file_path, 'r', encoding='utf-8') as f:
            content = f.read()
    except Exception as e:
        print("something wrong in load_data()")
    return content

#获取背景图片
def load_image(file_path):
    image = Image.open(file_path)
    graph = np.array(image)
    return graph


def generate_wordcloud(content, graph):
    result = jieba.analyse.textrank(content, topK=50, withWeight=True)
    keywords = dict()
    for i in result:
        keywords[i[0]] = random.randint(1, 10)
    wc = WordCloud(font_path='caoshu.ttf',    #设置字体
                   background_color='White',      # 背景颜色
                   max_words=50,         # 词云显示的最大词数
                   mask=graph)
    wc.generate_from_frequencies(keywords)      #生成词云
    image_color = ImageColorGenerator(graph)    # 从背景图片生成颜色值
   #显示图片
    plt.imshow(wc)
    plt.imshow(wc.recolor(color_func=image_color))
    plt.axis("off")
    plt.show()
    #生成图片文件
    wc.to_file(path.join(d, "ciyun.png"))


if __name__ == '__main__':
    data_file = input('Please enter a data file path:')
    content = load_data(data_file)
    image_file = input('Please enter a image file path:')
    graph = load_image(image_file)

    generate_wordcloud(content, graph)

背景图:


dq.jpg

生成的词云图如下:(我用的是草书所以飘逸了点)


ciyun.png

以上即为本次jieba分词体验的全部内容。

参考:

  1. 各分词工具介绍
  2. 常见分词工具总结
  3. python命名实体抽取学习记录(1)
  4. 短文本情感分析
  5. 如果看了此文还不懂 Word2Vec,那是我太笨
  6. 大白话讲解word2vec到底在做些什么
  7. 【工具】语义分析系统---- NLPIR
  8. 依存句法分析与语义依存分析的区别
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,324评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,303评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,192评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,555评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,569评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,566评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,927评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,583评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,827评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,590评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,669评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,365评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,941评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,928评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,159评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,880评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,399评论 2 342

推荐阅读更多精彩内容

  • jieba分词,学习,为了全面了解该模块,,预设学习路线:官方文档——优秀博客文章——实践学习 官方文档部分 (文...
    竹林徒儿阅读 4,020评论 1 12
  • 在接下来的分词练习中将使用到四川大学公共管理学院的一篇新闻进行练习,文本如下: 为贯彻落实党的十九大精神,不断提升...
    nicokani阅读 1,224评论 0 4
  • 参考:Python 中文分词组件 jiabaPython中文分词 jieba 十五分钟入门与进阶jieba完整文档...
    领悟悟悟阅读 4,285评论 1 1
  • 大二的日子还有两个多月就结束了。昨晚室友E说,一位大一的学弟问了她一个问题。 "假如能够回到大一,你会选择做些什么...
    信安阅读 576评论 0 0
  • 和同事一起吃饭,席间俨神去接了通电话,回来之后特别严肃的对我们讲,他女朋友的室友,得了淋巴癌,才25岁。具体是什么...
    右右多阅读 1,399评论 1 1