Python中文分词库jieba(结巴分词)详细使用介绍

一,jieba的介绍

jieba 是目前表现较为不错的 Python 中文分词组件,它主要有以下特性:

  • 支持四种分词模式

    • 精确模式
    • 全模式
    • 搜索引擎模式
    • paddle模式
  • 支持繁体分词
  • 支持自定义词典
  • MIT 授权协议

二,安装和使用

1,安装

pip3 install jieba

2,使用

import jieba

三,主要分词功能

1,jieba.cut 和jieba.lcut

lcut 将返回的对象转化为list对象返回

传入参数解析:

def cut(self, sentence, cut_all=False, HMM=True, use_paddle=False):
# sentence: 需要分词的字符串;
# cut_all: 参数用来控制是否采用全模式;
# HMM: 参数用来控制是否使用 HMM 模型;
# use_paddle: 参数用来控制是否使用paddle模式下的分词模式,paddle模式采用延迟加载方式,通过enable_paddle接口安装paddlepaddle-tiny

1)精准模式(默认):

试图将句子最精确地切开,适合文本分析

seg_list = jieba.cut("我来到北京清华大学", cut_all=False)
print("精准模式: " + "/ ".join(seg_list))  # 精确模式

# -----output-----
精准模式: 我/ 来到/ 北京/ 清华大学

2)全模式:

把句子中所有的可以成词的词语都扫描出来, 速度非常快,但是不能解决歧义;

seg_list = jieba.cut("我来到北京清华大学", cut_all=True)
print("全模式: " + "/ ".join(seg_list))  # 全模式

# -----output-----
全模式: 我/ 来到/ 北京/ 清华/ 清华大学/ 华大/ 大学

3)paddle模式

利用PaddlePaddle深度学习框架,训练序列标注(双向GRU)网络模型实现分词。同时支持词性标注。
paddle模式使用需安装paddlepaddle-tiny,pip install paddlepaddle-tiny==1.6.1。
目前paddle模式支持jieba v0.40及以上版本。
jieba v0.40以下版本,请升级jieba,pip installjieba --upgrade。 PaddlePaddle官网

import jieba

# 通过enable_paddle接口安装paddlepaddle-tiny,并且import相关代码;
jieba.enable_paddle()  # 初次使用可以自动安装并导入代码
seg_list = jieba.cut(str, use_paddle=True)
print('Paddle模式: ' + '/'.join(list(seg_list)))

# -----output-----
Paddle enabled successfully......
Paddle模式: 我/来到/北京清华大学

2,jieba.cut_for_search 和 jieba.lcut_for_search

搜索引擎模式

在精确模式的基础上,对长词再次切分,提高召回率,适合用于搜索引擎分词

seg_list = jieba.cut_for_search("小明硕士毕业于中国科学院计算所,后在日本京都大学深造")  # 搜索引擎模式
print(", ".join(seg_list))

# -----output-----
小明, 硕士, 毕业, 于, 中国, 科学, 学院, 科学院, 中国科学院, 计算, 计算所, ,, 后, 在, 日本, 京都, 大学, 日本京都大学, 深造

3,jieba.Tokenizer(dictionary=DEFAULT_DICT)

新建自定义分词器,可用于同时使用不同词典。jieba.dt 为默认分词器,所有全局分词相关函数都是该分词器的映射。

import jieba

test_sent = "永和服装饰品有限公司"
result = jieba.tokenize(test_sent) ##Tokenize:返回词语在原文的起始位置
print(result)
for tk in result:
    # print ("word %s\t\t start: %d \t\t end:%d" % (tk[0],tk[1],tk[2])    )
    print (tk)

# -----output-----
<generator object Tokenizer.tokenize at 0x7f6b68a69d58>
('永和', 0, 2)
('服装', 2, 4)
('饰品', 4, 6)
('有限公司', 6, 10)

四,添加自定义词典

开发者可以指定自己自定义的词典,以便包含 jieba 词库里没有的词。虽然 jieba有新词识别能力,但是自行添加新词可以保证更高的正确率。

1,添加词典用法:

 jieba.load_userdict(dict_path)    # dict_path为文件类对象或自定义词典的路径。

2,其中自定义字典举例如下:

一个词占一行;每一行分三部分:词语、词频(可省略)、词性(可省略),用空格隔开,顺序不可颠倒。

创新办 3 i
云计算 5
凱特琳 nz
中信建投
投资公司

3,使用自定义词典示例:

1)使用自定义词典文件

import jieba

test_sent = "中信建投投资公司投资了一款游戏,中信也投资了一个游戏公司"
jieba.load_userdict("userdict.txt")
words = jieba.cut(test_sent)
print(list(words))

#-----output------
['中信建投', '投资公司', '投资', '了', '一款', '游戏', ',', '中信', '也', '投资', '了', '一个', '游戏', '公司']

2)使用 jieba 在程序中动态修改词典

import jieba

# 定义示例句子
test_sent = "中信建投投资公司投资了一款游戏,中信也投资了一个游戏公司"

#添加词
jieba.add_word('中信建投')
jieba.add_word('投资公司')

# 删除词
jieba.del_word('中信建投')

words = jieba.cut(test_sent)
print(list(words))

#-----output------
['中信', '建投', '投资公司', '投资', '了', '一款', '游戏', ',', '中信', '也', '投资', '了', '一个', '游戏', '公司']

五,关键词提取

1,基于TF-IDF算法的关键词提取

1)TF-IDF接口和示例

import jieba.analyse
  • jieba.analyse.extract_tags(sentence, topK=20, withWeight=False,allowPOS=())
    其中需要说明的是:

    • 1.sentence 为待提取的文本
    • 2.topK 为返回几个 TF/IDF 权重最大的关键词,默认值为 20
    • 3.withWeight 为是否一并返回关键词权重值,默认值为 False
    • 4.allowPOS 仅包括指定词性的词,默认值为空,即不筛选
  • jieba.analyse.TFIDF(idf_path=None) 新建 TFIDF 实例,idf_path 为 IDF 频率文件
import jieba
import jieba.analyse
#读取文件,返回一个字符串,使用utf-8编码方式读取,该文档位于此python同以及目录下
content  = open('data.txt','r',encoding='utf-8').read()
tags = jieba.analyse.extract_tags(content,topK=10,withWeight=True,allowPOS=("nr"))
print(tags)

# ----output-------
[('虚竹', 0.20382572423643955), ('丐帮', 0.07839419568792882), ('什么', 0.07287469641815765), ('自己', 0.05838617200768695), ('师父', 0.05459680087740782), ('内力', 0.05353758008018405), ('大理', 0.04885277765801372), ('咱们', 0.04458784837687502), ('星宿', 0.04412126568280158), ('少林', 0.04207588649463058)]

2)关键词提取所使用逆向文件频率(IDF)文本语料库可以切换成自定义语料库的路径

用法:jieba.analyse.set_idf_path(file_name) # file_name为自定义语料库的路径
自定义语料库示例:

劳动防护 13.900677652 勞動防護 13.900677652 生化学 13.900677652 生化學 13.900677652 奥萨贝尔 13.900677652 奧薩貝爾 13.900677652 考察队员 13.900677652 考察隊員 13.900677652 岗上 11.5027823792 崗上 11.5027823792 倒车档 12.2912397395 倒車檔 12.2912397395 编译 9.21854642485 編譯 9.21854642485 蝶泳 11.1926274509 外委 11.8212361103

3)关键词提取所使用停止词(Stop Words)文本语料库可以切换成自定义语料库的路径

  • 用法: jieba.analyse.set_stop_words(file_name) # file_name为自定义语料库的路径
  • 自定义语料库示例:
import jieba
import jieba.analyse
#读取文件,返回一个字符串,使用utf-8编码方式读取,该文档位于此python同以及目录下
content  = open(u'data.txt','r',encoding='utf-8').read()
jieba.analyse.set_stop_words("stopwords.txt")
tags = jieba.analyse.extract_tags(content, topK=10)
print(",".join(tags))

4)关键词一并返回关键词权重值示例

import jieba
import jieba.analyse
#读取文件,返回一个字符串,使用utf-8编码方式读取,该文档位于此python同以及目录下
content  = open(u'data.txt','r',encoding='utf-8').read()
jieba.analyse.set_stop_words("stopwords.txt")
tags = jieba.analyse.extract_tags(content, topK=10,withWeight=True)
print(tags)

2,词性标注

  • jieba.posseg.POSTokenizer(tokenizer=None) 新建自定义分词器,tokenizer参数可指定内部使用的 jieba.Tokenizer 分词器。 jieba.posseg.dt 为默认词性标注分词器。
  • 标注句子分词后每个词的词性,采用和 ictclas 兼容的标记法。
  • 用法示例
import jieba.posseg as pseg
words = pseg.cut("我爱北京天安门")
for word, flag in words:
    print('%s %s' % (word, flag))

# ----output--------
我 r
爱 v
北京 ns
天安门 ns

词性对照表

3,并行分词

将目标文本按行分隔后,把各行文本分配到多个 Python 进程并行分词,然后归并结果,从而获得分词速度的可观提升。用法:

  • jieba.enable_parallel(4):开启并行分词模式,参数为并行进程数
  • jieba.disable_parallel() :关闭并行分词模式

可参考 test_file.py

注意:基于 python 自带的 multiprocessing 模块,目前暂不支持 Windows

4,Tokenize:返回词语在原文的起止位置

1)默认模式

注意,输入参数只接受 unicode

import jieba
import jieba.analyse
result = jieba.tokenize(u'永和服装饰品有限公司')
for tk in result:
    print("word %s\t\t start: %d \t\t end:%d" % (tk[0],tk[1],tk[2]))

# ----output-------
word 永和		 start: 0 		 end:2
word 服装		 start: 2 		 end:4
word 饰品		 start: 4 		 end:6
word 有限公司		 start: 6 		 end:10

2)搜索模式

import jieba
import jieba.analyse
result = jieba.tokenize(u'永和服装饰品有限公司', mode='search')
for tk in result:
    print("word %s\t\t start: %d \t\t end:%d" % (tk[0],tk[1],tk[2]))

# ----output-------
word 永和		 start: 0 		 end:2
word 服装		 start: 2 		 end:4
word 饰品		 start: 4 		 end:6
word 有限		 start: 6 		 end:8
word 公司		 start: 8 		 end:10
word 有限公司		 start: 6 		 end:10

5,搜索引擎ChineseAnalyzer for Whoosh

使用 jieba 和 whoosh 可以实现搜索引擎功能。
whoosh 是由python实现的一款全文搜索工具包,可以使用 pip 安装它:

pip install whoosh

介绍 jieba + whoosh 实现搜索之前,你可以先看下文 whoosh 的简单介绍。
下面看一个简单的搜索引擎的例子:

import os
import shutil

from whoosh.fields import *
from whoosh.index import create_in
from whoosh.qparser import QueryParser
from jieba.analyse import ChineseAnalyzer

analyzer = ChineseAnalyzer()

schema = Schema(title=TEXT(stored=True),
                path=ID(stored=True),
                content=TEXT(stored=True,
                             analyzer=analyzer))
if not os.path.exists("test"):
    os.mkdir("test")
else:
    # 递归删除目录
    shutil.rmtree("test")
    os.mkdir("test")

idx = create_in("test", schema)
writer = idx.writer()

writer.add_document(
    title=u"document1",
    path="/tmp1",
    content=u"Tracy McGrady is a famous basketball player, the elegant basketball style of him attract me")
writer.add_document(
    title=u"document2",
    path="/tmp2",
    content=u"Kobe Bryant is a famous basketball player too , the tenacious spirit of him also attract me")
writer.add_document(
    title=u"document3",
    path="/tmp3",
    content=u"LeBron James is the player i do not like")

writer.commit()
searcher = idx.searcher()
parser = QueryParser("content", schema=idx.schema)

for keyword in ("basketball", "elegant"):
    print("searched keyword ",keyword)
    query= parser.parse(keyword)
    print(query,'------')
    results = searcher.search(query)
    for hit in results:
        print(hit.highlights("content"))
    print("="*50)

六,延迟加载

ieba 采用延迟加载,import jieba 和 jieba.Tokenizer() 不会立即触发词典的加载,一旦有必要才开始加载词典构建前缀字典。如果你想手工初始 jieba,也可以手动初始化。

import jieba
jieba.initialize()  # 手动初始化(可选)

上面代码中,使用 add_document() 把一个文档添加到了 index 中。在这些文档中,搜索含有 “basketball”和 “elegant” 的文档。

七,其他词典

1,占用内存较小的词典文件 https://github.com/fxsjy/jieba/raw/master/extra_dict/dict.txt.small

2,支持繁体分词更好的词典文件 https://github.com/fxsjy/jieba/raw/master/extra_dict/dict.txt.big

下载你所需要的词典,然后覆盖 jieba/dict.txt 即可;或者用 jieba.set_dictionary('data/dict.txt.big')

更多关于Python中文分词的文章请查看下面的相关链接

(0)

相关推荐

  • Python中文分词库jieba,pkusegwg性能准确度比较

    中文分词(Chinese Word Segmentation),将中文语句切割成单独的词组.英文使用空格来分开每个单词的,而中文单独一个汉字跟词有时候完全不是同个含义,因此,中文分词相比英文分词难度高很多. 分词主要用于NLP 自然语言处理(Natural Language Processing),使用场景有: 搜索优化,关键词提取(百度指数) 语义分析,智能问答系统(客服系统) 非结构化文本媒体内容,如社交信息(微博热榜) 文本聚类,根据内容生成分类(行业分类) Python的中文分词 Pyt

  • Python结巴中文分词工具使用过程中遇到的问题及解决方法

    本文实例讲述了Python结巴中文分词工具使用过程中遇到的问题及解决方法.分享给大家供大家参考,具体如下: 结巴分词是Python语言中效果最好的分词工具,其功能包括:分词.词性标注.关键词抽取.支持用户词表等.这几天一直在研究这个工具,在安装与使用过程中遇到一些问题,现在把自己的一些方法帖出来分享一下. 官网地址:https://github.com/fxsjy/jieba 1.安装. 按照官网上的说法,有三种安装方式, 第一种是全自动安装:easy_install jieba 或者 pip

  • python使用jieba实现中文分词去停用词方法示例

    前言 jieba 基于Python的中文分词工具,安装使用非常方便,直接pip即可,2/3都可以,功能强悍,十分推荐. 中文分词(Chinese Word Segmentation) 指的是将一个汉字序列切分成一个一个单独的词. 分词模块jieba,它是python比较好用的分词模块.待分词的字符串可以是 unicode 或 UTF-8 字符串.GBK 字符串.注意:不建议直接输入 GBK 字符串,可能无法预料地错误解码成 UTF-8 支持三种分词模式 1 精确模式,试图将句子最精确地切开,适合

  • Python3爬虫中关于中文分词的详解

    原理 中文分词,即 Chinese Word Segmentation,即将一个汉字序列进行切分,得到一个个单独的词.表面上看,分词其实就是那么回事,但分词效果好不好对信息检索.实验结果还是有很大影响的,同时分词的背后其实是涉及各种各样的算法的. 中文分词与英文分词有很大的不同,对英文而言,一个单词就是一个词,而汉语是以字为基本的书写单位,词语之间没有明显的区分标记,需要人为切分.根据其特点,可以把分词算法分为四大类: ·基于规则的分词方法 ·基于统计的分词方法 ·基于语义的分词方法 ·基于理解

  • Python中文分词实现方法(安装pymmseg)

    本文实例讲述了Python中文分词实现方法.分享给大家供大家参考,具体如下: 在Python这pymmseg-cpp 还是十分方便的! 环境 ubuntu10.04 , python2.65 步骤: 1 下载mmseg-cpp的源代码 http://code.google.com/p/pymmseg-cpp/ 2 执行: tar -zxf pymmseg-cpp*.tar.gz //解压后得到pymmseg 目录 cd pymmseg\mmseg-cpp python build.py #生成

  • python中文分词,使用结巴分词对python进行分词(实例讲解)

    在采集美女站时,需要对关键词进行分词,最终采用的是python的结巴分词方法. 中文分词是中文文本处理的一个基础性工作,结巴分词利用进行中文分词. 其基本实现原理有三点: 1.基于Trie树结构实现高效的词图扫描,生成句子中汉字所有可能成词情况所构成的有向无环图(DAG) 2.采用了动态规划查找最大概率路径, 找出基于词频的最大切分组合 3.对于未登录词,采用了基于汉字成词能力的HMM模型,使用了Viterbi算法 安装(Linux环境) 下载工具包,解压后进入目录下,运行:python set

  • python中文分词教程之前向最大正向匹配算法详解

    前言 大家都知道,英文的分词由于单词间是以空格进行分隔的,所以分词要相对的容易些,而中文就不同了,中文中一个句子的分隔就是以字为单位的了,而所谓的正向最大匹配和逆向最大匹配便是一种分词匹配的方法,这里以词典匹配说明. 最大匹配算法是自然语言处理中的中文匹配算法中最基础的算法,分为正向和逆向,原理都是一样的. 正向最大匹配算法,故名思意,从左向右扫描寻找词的最大匹配. 首先我们可以规定一个词的最大长度,每次扫描的时候寻找当前开始的这个长度的词来和字典中的词匹配,如果没有找到,就缩短长度继续寻找,直

  • Python中文分词工具之结巴分词用法实例总结【经典案例】

    本文实例讲述了Python中文分词工具之结巴分词用法.分享给大家供大家参考,具体如下: 结巴分词工具的安装及基本用法,前面的文章<Python结巴中文分词工具使用过程中遇到的问题及解决方法>中已经有所描述.这里要说的内容与实际应用更贴近--从文本中读取中文信息,利用结巴分词工具进行分词及词性标注. 示例代码如下: #coding=utf-8 import jieba import jieba.posseg as pseg import time t1=time.time() f=open(&q

  • python中文分词库jieba使用方法详解

    安装python中文分词库jieba 法1:Anaconda Prompt下输入conda install jieba 法2:Terminal下输入pip3 install jieba 1.分词 1.1.CUT函数简介 cut(sentence, cut_all=False, HMM=True) 返回生成器,遍历生成器即可获得分词的结果 lcut(sentence) 返回分词列表 import jieba sentence = '我爱自然语言处理' # 创建[Tokenizer.cut 生成器]

  • Python jieba 中文分词与词频统计的操作

    我就废话不多说了,大家还是直接看代码吧~ #! python3 # -*- coding: utf-8 -*- import os, codecs import jieba from collections import Counter def get_words(txt): seg_list = jieba.cut(txt) c = Counter() for x in seg_list: if len(x)>1 and x != '\r\n': c[x] += 1 print('常用词频度统

  • python实现中文分词FMM算法实例

    本文实例讲述了python实现中文分词FMM算法.分享给大家供大家参考.具体分析如下: FMM算法的最简单思想是使用贪心算法向前找n个,如果这n个组成的词在词典中出现,就ok,如果没有出现,那么找n-1个...然后继续下去.假如n个词在词典中出现,那么从n+1位置继续找下去,直到句子结束. import re def PreProcess(sentence,edcode="utf-8"): sentence = sentence.decode(edcode) sentence=re.s

随机推荐