Jieba分词简介[通俗易懂]

Jieba分词简介[通俗易懂]Jieba分词官网:https://github.com/fxsjy/jieba 三种分词模式 Jieba提供了三种分词模式:精确模式,试图将句子最精确地切开,适合文本分析; 全模式,把句子中所有的可以成词的词语都扫描出来,速度非常快,但是不能解决歧义; 搜索引擎模式,在精确模式的基础上,对长词再次切分,提高召回率,适合用于搜索引擎分词。importjiebasent…

大家好,又见面了,我是你们的朋友全栈君。

Jieba分词官网:https://github.com/fxsjy/jieba

  • 三种分词模式

Jieba提供了三种分词模式:

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

sent = '用刀尖入水,用显微镜看雪,就算反复如此,还是忍不住问一问,你数过天上的星星吗?它们和小鸟一样,总在我胸口跳伞。'
seg_list1 = jieba.cut(sent,cut_all=True)
print('全模式:','/'.join(seg_list1))
seg_list2 = jieba.cut(sent,cut_all=False)
print('精确模式:','/'.join(seg_list2))
seg_list3 = jieba.cut(sent)
print('默认精确模式:','/'.join(seg_list3))
seg_list4 = jieba.cut_for_search(sent)
print('搜索引擎模式:','/'.join(seg_list4))

运行结果如下:

全模式: 用/刀尖/入水///用/显微/显微镜/看/雪///就算/反复/如此///还是/忍不住/不住/问一问///你/数/过天/天上/的/星星/吗///它们/和/小鸟/一样///总/在/我/胸口/跳伞//
精确模式: 用/刀尖/入/水/,/用/显微镜/看雪/,/就算/反复/如此/,/还是/忍不住/问一问/,/你/数过/天上/的/星星/吗/?/它们/和/小鸟/一样/,/总在/我/胸口/跳伞/。
默认精确模式: 用/刀尖/入/水/,/用/显微镜/看雪/,/就算/反复/如此/,/还是/忍不住/问一问/,/你/数过/天上/的/星星/吗/?/它们/和/小鸟/一样/,/总在/我/胸口/跳伞/。
搜索引擎模式: 用/刀尖/入/水/,/用/显微/显微镜/看雪/,/就算/反复/如此/,/还是/不住/忍不住/问一问/,/你/数过/天上/的/星星/吗/?/它们/和/小鸟/一样/,/总在/我/胸口/跳伞/。
  • 载入自定义词典

将“入水”加到自定义词典user_dict.txt中,然后进行默认精确模式的分词:

jieba.load_userdict('./user_dict.txt')

运行结果如下:

默认精确模式: 用/刀尖/入水/,/用/显微镜/看雪/,/就算/反复/如此/,/还是/忍不住/问一问/,/你/数过/天上/的/星星/吗/?/它们/和/小鸟/一样/,/总在/我/胸口/跳伞/。
  • 词性标注

import jieba.posseg as psg

sent = '用刀尖入水,用显微镜看雪,就算反复如此,还是忍不住问一问,你数过天上的星星吗?它们和小鸟一样,总在我胸口跳伞。'
seg_list = psg.cut(sent)
print(' '.join(['{0}/{1}'.format(w, t) for w, t in seg_list]))

运行结果如下:

用/p 刀尖/n 入/v 水/n ,/x 用/p 显微镜/nr 看/v 雪/n ,/x 就算/v 反复/v 如此/c ,/x 还是/c 忍不住/v 问一问/l ,/x 你/r 数/m 过/ug 天上/s 的/uj 星星/nz 吗/y ?/x 它们/r 和/c 小鸟/n 一样/r ,/x 总/b 在/p 我/r 胸口/s 跳伞/v 。/x
  • 实战之高频词提取

参考资料:https://github.com/nlpinaction/learning-nlp

高频词一般是指文档中出现频率较高且非无用的词语,其一定程度上代表了文档的焦点所在。针对单篇文档,可以作为一种关键词来看。对于如新闻这样的多篇文档,可以将其作为热词,发现舆论焦点。

高频词提取其实就是自然语言处理中的TF策略。其主要有以下干扰项:

  • 标点符号:一般标点符号无任何价值,需要去除。
  • 停用词:诸如“的”“是”“了”等常用词无任何意义,也需要剔除。

下面采用Jieba分词,针对搜狗实验室的新闻数据,进行高频词的提取。

首先,进行数据的读取:

def get_content(path):
    with open(path, 'r', encoding='gbk', errors='ignore') as f:  # GBK编码专门用来解决中文编码
        content = ''
        for l in f:
            content += l.strip()
        return content

定义高频词统计的函数,其输入是一个词的数组:

def get_TF(words, topK=10):
    tf_dic = {}
    for w in words:
        tf_dic[w] = tf_dic.get(w, 0) + 1  # get() 函数返回指定键的值,如果值不在字典中返回默认值。
    return sorted(tf_dic.items(), key=lambda x: x[1], reverse=True)[:topK]

 整理常用的停用词(包括标点符号),按照每行一个写入到一个文件中:

def stop_words(path):
    with open(path) as f:
        return [l.strip() for l in f]

最后,主函数如下,这里仅列举了求出高频词的前10个:

def main():
    import glob
    import random
    import jieba

    files = glob.glob('./data/news/C000013/*.txt')
    corpus = [get_content(x) for x in files]

    # sample_inx = random.randint(0, len(corpus))
    sample_inx = 0
    split_words = [x for x in jieba.cut(corpus[sample_inx]) if x not in stop_words('/./data/stop_words.utf8')]
    print('样本之一:' + corpus[sample_inx])
    print('样本分词效果:' + '/'.join(split_words))
    print('样本的topK(10)词:' + str(get_TF(split_words)))

结果如下:

样本之一:药物流产(专题 访谈 咨询)具有一定的适应性,并非所有孕妇都可以毫无顾忌地做药流,特别是多次做过人流者,再进行药流显然是不合适的。已经进行过人流的孕妇,子宫内膜曾经遭受过机械性刺激,其光滑度受到影响,常常导致发育不良,胎盘粘连等,这与手术操作不当发生子宫内膜表面上皮的重建困难,腺上皮不能再生,间质出现纤维化及玻璃样改变或钙化有关。多次人流还有可能引起子宫内膜的感染,严重者使子宫内膜不再增殖而发生炎性萎缩。这些都是给再次采用药物流产带来极大的麻烦。做人流次数越多,发生药物不完全流产的比例也就越高,而不完全流产将对女性的健康造成很大的危害。在临床中经常见到药物流产不灵的现象。这些服药者多半埋怨甚至怀疑药物有问题,实际上这是与其自身的具体情况有直接联系。药物流产有著严格的指征,并非随便可以服用的。禁忌症就包括经常进行人流术者。要知道,药物流产与人工流产一样,也是迫不得已的方法,千万不可将其当作避孕“常规”,更不能误认为是完美无缺的补救措施。曾经做过人流术的女性,进行药流前最好多听听医生的意见,对于医生的否决务必要遵从,切勿自以为是,健康和安全是首位的。
样本分词效果:药物/流产/专题/ /访谈/ /咨询/具有/一定/适应性/孕妇/毫无顾忌/做/药流/特别/多次/做过/人流/进行/药流/显然/合适/已经/进行/人流/孕妇/子宫/内膜/曾经/遭受/机械性/刺激/光滑度/影响/常常/导致/发育不良/胎盘/粘连/手术/操作/不当/发生/子宫/内膜/表面/上皮/重建/困难/腺/上皮/不能/再生/间质/出现/纤维化/玻璃/样/改变/钙化/多次/人流/可能/引起/子宫/内膜/感染/严重者/子宫/内膜/不再/增殖/发生/炎性/萎缩/再次/采用/药物/流产/带来/极大/麻烦/做人流/次数/越/发生/药物/完全/流产/比例/越/高/完全/流产/女性/健康/造成/很大/危害/临床/中/经常/见到/药物/流产/不灵/现象/服药者/多半/埋怨/怀疑/药物/问题/实际上/这是/具体情况/直接/联系/药物/流产/有著/严格/指征/随便/服用/禁忌症/包括/经常/进行/人流/术者/知道/药物/流产/人工流产/迫不得已/方法/千万/不可/当作/避孕/常规/更/不能/误认为/完美无缺/补救措施/曾经/做过/人流/术/女性/进行/药流前/最好/听听/医生/意见/医生/否决/务必/遵从/切勿/自以为是/健康/安全/首位
样本的topK(10)词:[('药物', 7), ('流产', 7), ('人流', 5), ('子宫', 4), ('进行', 4), ('内膜', 4), ('发生', 3), ('越', 2), (' ', 2), ('做过', 2)]

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/142109.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • NS_TEST_ns是什么软件

    NS_TEST_ns是什么软件TEST

  • plc的移位指令C语言实现,PLC中使用移位指令是如何实现移位动作的

    plc的移位指令C语言实现,PLC中使用移位指令是如何实现移位动作的plc移位指令怎么么用楼主的意思大约是用X2来检测有没有罐子,X1用来定位灌装位置,现在需要把检测罐子的X2位置,移动到灌装位置的前面,应该是提供图片的下面的那种应用吧,这种应用的思路其实主要是要记录下到灌装工位时是否有罐子,程序在图片里面,假设开机前X1和X2之间没有罐子开机后传送带运转当X1检测到应该有罐子的工位来到罐装工位时,首先将检测罐子有无的X2的状态放入M3中,有罐子M3为1,没罐子M…

  • slam关键技术_深度技术还做系统吗

    slam关键技术_深度技术还做系统吗本文由图像处理知识库整理SLAM(simultaneouslocalizationandmapping),也称为CML(ConcurrentMappingandLocali…

  • TreeTable树形数据列表

    TreeTable树形数据列表使用Treetable展示ajax数据,通用的List集合递归转换为具有层级关系的List集合

  • android flash路径动画,Flash制作沿着路径的动画

    android flash路径动画,Flash制作沿着路径的动画上完课后,有些同学因为课上老师讲的太快,还是不会做路径动画。今天为大家介绍Flash制作沿着路径的动画介绍,操作很简单的,一起来学习吧!1、首先,打开flash软件,新建一个文件2、这里,我演示一个红色圆的路径动画,利用快捷键ctrl+F8新建一个元件1,画一个圆3、回到场景1,利用铅笔工具,随意画一条路径4、新建一个图层,将刚刚画的元件1的圆拖进图层中,这里为了理解方便,我修改了图层名字5、我这…

  • Navicat:Access violation at address xxxxxxxxx in module ‘navicat.exe’.Read of address xxxxxx

    Navicat:Access violation at address xxxxxxxxx in module ‘navicat.exe’.Read of address xxxxxx在navicat中如果报了这个错误,则表示内存越界,需要重新注册windows的动态链接库;解决方案:打开cmd;在命令行中输入for%1in(%windir%\system32\*.dll)doregsvr32.exe/s%1回车运行;等待动态链接库刷新完成,重启mysql和navicat即可。…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号