Jieba常用功能 分词/自定义词典/标注/关键词提前/返回词位置

16 篇文章 0 订阅

安装

  • 全自动:easy_install jieba 或者 pip install jieba 或者pip3 install jieba
  • 手 动:jieba 目录放置于当前目录或者 site-packages 目录
  • 半自动:下载http://pypi.python.org/pypi/jieba/、解压、运行python setup.py install

算法

  • 基于统计词典,构造前缀词典;基于前缀词典对句子进行切分,得到所有切分可能;根据切分位置,构造一个有向无环图(DAG)
  • 基于DAG图,采用动态规划计算最大概率路径(最有可能的分词结果),根据最大概率路径分词
  • 对于未登录词(词库中没有的词),采用有汉字成词能力的 HMM 模型进行切分
  • 注: jieba中没有使用trie树作为前缀词典存储的数据结构,用的是前缀集合,如set([‘数’, ‘数据’, ‘数据结’, ‘数据结构’])

功能

  1、分词(三种分词模式 )

  A、精确模式:将句子精确切开,适合文本分析。默认是精确模式。 
  B、全模式:将句中所有可以成词的词语都扫描出来,适合用于搜索引擎构建倒排索引的分词,粒度比较细 
  C、搜索引擎模式:在精确模式基础上,对长词再次切分,适合搜索引擎 
  注:当指定jieba.cut_for_search或jieba.cut的参数HMM=True时,就有了新词发现的能力

# encoding=utf-8

import jieba

# 精确模式

seg_list = jieba.cut("我去过清华大学和北京大学。")
print(unicode("精确模式: ","utf-8")+ "/ ".join(seg_list))

# 全模式

seg_list = jieba.cut("我去过清华大学和北京大学。", cut_all=True)
print(unicode("全模式: ","utf-8") + "/ ".join(seg_list))

# 搜索引擎模式

seg_list = jieba.cut_for_search("我去过清华大学和北京大学。")
print(unicode("搜索引擎模式: ","utf-8") + "/ ".join(seg_list))

# 精确模式/全模式下-新词发现 “杭研”没有在词典中,也被HMM模型 Viterbi算法识别出来

seg_list = jieba.cut("他来到了网易杭研大厦",HMM=True)
print(unicode("精确模式/全模式-新词发现: ","utf-8") + "/ ".join(seg_list))

# 搜索引擎模式下-新词发现 “杭研”没有在词典中,也被HMM模型 Viterbi算法识别出来

seg_list = jieba.cut_for_search("他来到了网易杭研大厦",HMM=True)
print(unicode("搜索引擎模式-新词发现: ","utf-8") + "/ ".join(seg_list))

#print result:

#精确模式: 我/ 去过/ 清华大学/ 和/ 北京大学/ 。

#全模式: 我/ 去过/ 清华/ 清华大学/ 华大/ 大学/ 和/ 北京/ 北京大学/ 大学/ /

#搜索引擎模式: 我/ 去过/ 清华/ 华大/ 大学/ 清华大学/ 和/ 北京/ 大学/ 北京大学/ 。

#精确模式/全模式-新词发现: 他/ 来到/ 了/ 网易/ 杭研/ 大厦

#搜索引擎模式-新词发现: 他/ 来到/ 了/ 网易/ 杭研/ 大厦

2、添加自定义用户词典

      Jieba 有新词发现能力,但添加用户词典可以保证更高的正确率。 

      无用户词典下中英文分词示例

# encoding=utf-8

import jieba

data=[
   "世界经济论坛也叫达沃斯论坛。",
   "The World Economic Forum is also called the Davos Forum."
    ]

for d in data:
   seg_list = jieba.cut(d)
   #词与词之间用","连接
   print(",".join(seg_list))

#无用户词典下中英文分词结果

   # 世界, 经济, 论坛, 也, 叫, 达沃斯, 论坛,。
   # The,, World,, Economic,, Forum,, is, , also,, called,, the,, >Davos,, Forum,.

    有用户词典下的中英文分词

# encoding=utf-8
import jieba

"""
默认格式下的用户词典"dict/userdict:
世界经济论坛 n
达沃斯论坛 n
World Economic Forum n
Davos Forum n

"""

# 加载用户词典

jieba.load_userdict("dict/userdict")

# 测试用户词典

data=[
   "世界经济论坛也叫达沃斯论坛。",
   "The World Economic Forum is also called the Davos Forum."
    ]

for d in data:
   seg_list = jieba.cut(d)
   #词与词之间用","连接
   print(",".join(seg_list))

#默认格式用户词典下中英文分词结果

   # 世界经济论坛,也,叫,达沃斯论坛,。
   # The, ,World, ,Economic, ,Forum, ,is, ,also, ,called, ,the, ,Davos, >,Forum,.

可以看到jieba分词在默认格式下,中文没问题,英文专有名词不太理想。不过,可以通过修改jieba包中的init.py文件几个正则来解决。详情请见::https://blog.csdn.net/wangpei1949/article/details/57077007
  修改格式后用户词典下中英文分词示例 
 

# encoding=utf-8
import jieba

"""
修改格式后的用户词典"dict/userdict:用@@来间隔词、词频、词性
世界经济论坛@@n
达沃斯论坛@@n
World Economic Forum@@n
Davos Forum@@n

"""

# 加载用户词典

jieba.load_userdict("dict/userdict")

# 测试用户词典

data=[
   "世界经济论坛也叫达沃斯论坛。",
   "The World Economic Forum is also called the Davos Forum."
    ]

for d in data:
   seg_list = jieba.cut(d)
   #词与词之间用","连接
   print(",".join(seg_list))

#修改格式后中英文分词结果

   # 世界经济论坛,也,叫,达沃斯论坛,。
   # The, ,World Economic Forum, ,is, ,also, ,called, ,the, ,Davos >Forum,.

3、关键词提取

   基于 TF-IDF 算法的关键词抽取 
    jieba.analyse.extract_tags(sentence, topK=20, withWeight=False, allowPOS=(‘ns’, ‘n’, ‘vn’, ‘v’)) 
    参数解释: 
      (1)sentence :待提取的文本; 
      (2)topK :返回K个权重最大的关键词 
      (3)withWeight :是否返回权重 
      (4)allowPOS :是否仅包括指定词性的词
 

# encoding=utf-8

#关键词提取

import jieba.analyse

kWords = jieba.analyse.extract_tags("此外,公司拟对全资子公司吉林欧亚置业>有限公司增资4.3亿元,增资后,吉林欧亚置业注册资本由7000万元增加到5亿元。>吉林欧亚置业主要经营范围为房地产开发及百货零售等业务。目前在建吉林欧亚城>市商业综合体项目。2013年,实现营业收入0万元,实现净利润-139.13万元。", >topK=5,withWeight=True)
for word,weight in kWords:
   # print(word+":"+weight)
   print word,":",weight

#结果

# 欧亚 : 0.730014270029
# 吉林 : 0.659038184374
# 置业 : 0.488713452211
# 万元 : 0.339272248186
# 增资 : 0.335824019852


"""
注: 关键词提取所使用逆文频(IDF)库、停用词库可切换成自定路径 
基于 TextRank 算法的关键词抽取 
   jieba.analyse.textrank(sentence, topK=20, withWeight=False, allowPOS=(‘ns’, ‘n’, ‘vn’, ‘v’)) 
     参数解释: 
       (1)sentence :待提取的文本; 
       (2)topK :返回K个权重最大的关键词 
       (3)withWeight :是否返回权重 
       (4)allowPOS :是否仅包括指定词性的词 
     TextRank基本思想: 
       (1)分词 
       (2)找词之间共现关系,构建图 
       (3)计算图中节点的PageRank
"""

4、词性标注

import jieba.posseg as pseg
words = pseg.cut("我爱北京天安门")
for word, flag in words:
print('%s %s' % (word, flag))

#词性
#我 r
#爱 v
#北京 ns
#天安门 ns

5、并行分词

      原理: 
    文本按行分隔后,分配到多个 Python 进程并行分词,最后归并结果。 
   用法: 
    jieba.enable_parallel(4) # 开启并行分词模式,参数为并行进程数 
    jieba.disable_parallel() # 关闭并行分词模式 
   效果: 
    在 4 核 3.4GHz Linux 机器上,对金庸全集进行精确分词,获得了 1MB/s 的速度,是单进程版的 3.3 倍。 
    注意: 
    并行分词仅支持默认分词器 jieba.dt 和 jieba.posseg.dt。目前暂不支持 Windows
6、返回词语在原文的起止位置

import jieba
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]))

#结果

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

转自:https://blog.csdn.net/wangpei1949/article/details/57413419

### 回答1: jieba是一个开源的中文分词工具,可以将一段中文文本按照语的划分进行分词jieba工具在分词时会根据默认的词典进行划分,但有时候默认的词典可能不能满足特定领域或者自定义汇的需求,这时候就可以使用jieba自定义词典功能jieba常用自定义词典功能可以帮助用户根据自己的需要添加一些特定的汇,使得jieba能够更好地根据这些汇进行分词自定义词典通常包括两个文件,一个是用户自定义词典文件(可以是纯文本或者Excel表格等格式),另一个是结巴分词的默认词典,在分词时会同时参考两个词典。 用户可以根据需要自行添加汇到自定义词典文件中,每个汇一行,格式为:性。其中,频和性是可选项,如果没有可以不填。用户可以根据需求设置不同的频和性,频可以用来影响分词结果的优先级,性可以用来进行标注等。 当用户将自定义词典文件添加到jieba分词工具中后,jieba在进行分词时会优先参考自定义词典中的汇,从而更准确地进行分词。这样,用户可以通过添加自定义词典来解决一些jieba默认分词结果不准确的问题,提高分词的准确度。 综上所述,jieba常用自定义词典功能可以帮助用户添加特定的汇,提高分词的准确性和适应性,使得分词结果更符合用户的需求。 ### 回答2: jieba是一个常用的Python中文分词库。它可以对中文文本进行分词处理,将句子中的每个语切分开来。jieba分词效果很好,但有时候会出现一些分词错误或漏切的情况。 为了解决这个问题,jieba提供了自定义词典功能自定义词典可以根据用户的需求,添加额外的语,从而提高分词的准确性。用户可以在自定义词典中添加常用的专有名、品牌名、地名等,让jieba分词过程中将这些语切分出来。 使用jieba自定义词典非常简单。用户只需要在文件中按照一定的格式添加自定义语,并将该文件作为参数传入jieba的初始化函数中即可。自定义词典文件的格式为每个语一行,每行包含三个字段,分别是语、频和性。频和性可以省略,如果省略则默认为5和n(普通名)。 自定义词典的添加可以根据业务的需要进行灵活调整。并且jieba还提供了动态添加和删除语的功能,可以在运行时根据实际情况来动态更新自定义词典。 总而言之,jieba常用自定义词典功能可以帮助我们解决分词错误和漏切的问题,提高分词的准确性。通过合理的添加自定义语,可以适应不同的应用场景,从而更好地满足中文分词的需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值