jieba:我虽然结巴,可是我会分词啊

介绍

jieba目前是一款比较好分词模块

分词

import jieba

# 可使用jieba.cut进行分词
sentence = "失去恋人所带来的苦痛远远超过了他的承受范围"
"""
函数大体以下
jieba.cut(sentence, cut_all=False, HMM=True)

sentence:分词的句子
cut_all:是否使用全模式,默认是False,表示精准模式
HMM:是否使用隐藏马尔科夫模型,默认为True
"""
seg = jieba.cut(sentence)
# 获得的seg是一个生成器
print(list(seg))  # ['失去', '恋人', '所', '带来', '的', '苦痛', '远远', '超过', '了', '他', '的', '承受', '范围']
# 能够看到分的仍是蛮准确的

# 若是使用全模式呢
seg = jieba.cut(sentence, cut_all=True)
print(list(seg))  # ['失去', '恋人', '所', '带来', '的', '苦痛', '远远', '远超过', '超过', '了', '他', '的', '承受', '范围']

# 默认通常都是用精准模式

# 除了jieba.cut以外还有一个jieba.lcut,二者之间功能同样,只不事后者会直接返回一个列表

# 搜索引擎模式
seg = jieba.cut_for_search(sentence)
print(list(seg))  # ['失去', '恋人', '所', '带来', '的', '苦痛', '远远', '超过', '了', '他', '的', '承受', '范围']
# 因为句子比较简单,致使和cut的结果是相似的
# 同理也有lcut_for_search,也是直接返回一个列表

添加自定义词典

import jieba

# 可使用jieba.cut进行分词
sentence = "古明地觉来自于东方地灵殿,是一个超级可爱的女孩"
print(jieba.lcut(sentence))  # ['古明', '地觉', '来自', '于', '东方', '地灵', '殿', ',', '是', '一个', '超级', '可爱', '的', '女孩']

# 注意到,古明地觉四个字被进行了切割,能够若是我想让它做为总体出现呢
# jieba分词会使用一个词典,根据词典里面的词进行分词,若是像人名之类的,再也不jieba使用的词典里,那么分词就会出现不预期以内的结果

# 因此咱们能够自定义词典,追加到jieba使用的词典里面

自定义的词典格式以下:python

词语 词频(可省略) 词性(可省略)算法

至于词频和词性后面会说函数

自定义一个1.txt文件,里面包含内容以下搜索引擎

古明地觉
东方地灵殿
import jieba

sentence = "古明地觉来自于东方地灵殿,是一个超级可爱的女孩"
print(jieba.lcut(sentence))  # ['古明', '地觉', '来自', '于', '东方', '地灵', '殿', ',', '是', '一个', '超级', '可爱', '的', '女孩']

jieba.load_userdict("1.txt")
print(jieba.lcut(sentence))  # ['古明地觉', '来自', '于', '东方地灵殿', ',', '是', '一个', '超级', '可爱', '的', '女孩']

# 能够看到,在将咱们自定义的词典load进去以后,就能分出咱们想要的结果了
# 由于jieba使用词典里的单词,词性标注,词频等等来切割单词
# 但若是词不在里面的话,就不行了,所以咱们能够本身定义告诉结巴,'古明地觉'和'东方地灵殿'都是一个总体,不要进行切割

除此以外,还能够不用经过加载文件的方式来加载词典code

import jieba

sentence = "古明地觉来自于东方地灵殿,是一个超级可爱的女孩"
print(jieba.lcut(sentence))  # ['古明', '地觉', '来自', '于', '东方', '地灵', '殿', ',', '是', '一个', '超级', '可爱', '的', '女孩']

# 经过add_word的方式一样能够添加咱们本身定义的词语
jieba.add_word("古明地觉")
jieba.add_word("东方地灵殿")
print(jieba.lcut(sentence))  # ['古明地觉', '来自', '于', '东方地灵殿', ',', '是', '一个', '超级', '可爱', '的', '女孩']

# 固然也能够动态参数
jieba.del_word("东方地灵殿")
print(jieba.lcut(sentence))  # ['古明地觉', '来自', '于', '东方', '地灵', '殿', ',', '是', '一个', '超级', '可爱', '的', '女孩']

# 能够看到,在删除'东方地灵殿'以后,又分的不许了

关键词提取

jieba 提供了两种关键词提取方法,分别基于 TF-IDF 算法和 TextRank 算法。索引

  • TF-IDF(Term Frequency-Inverse Document Frequency, 词频-逆文件频率)token

    一个词语在一篇文章中出现次数越多,同时在全部文档中出现次数越少,越可以表明该文章文档

    import jieba
    import jieba.analyse
    
    sentence = """
    
    地灵殿的主人。
    虽然地底都市已经被排除在地狱以外,但那些曾经是地狱设施的遗迹里
    依然还残留着无数充满怨念的灵们,于是必须有人对他们进行管理。
    在灼热地狱遗址上创建起了地灵殿,她就在那里居住了下来。
    由于她可以读取他人心中的想法,不论是任何妖怪,怨灵都为之感到恐惧,
    不知从什么时候起几乎没有人再来地灵殿造访了。
    可是,相反由于能读心而受到那些不会说话的动物们的喜好,地灵殿逐渐
    变成了充满火焰猫,地狱鸦等宠物们的房屋。
    由于宠物的增多结果致使灼热地狱遗迹没法完美的管理,最后只得把不少
    管理事项交由宠物们去作。
    把宠物的管理交给宠物去作。
    把庭院的修缮交给宠物去作。
    把陪妹妹玩的工做交给宠物去作,如此。
    可是,忽然出现不该该出现的地上的人类,在据说怨灵和间歇泉异变
    以后她大吃一惊。
    怨灵的管理她交由阿燐去作,灼热地狱的火力调节则交给了阿空。
    她们应该都是忠心于觉不会作什么坏事才对。她相信决不会发生
    什么异变才对。
    搞很差,也许是眼前这我的类撒谎有什么别的企图,她这么想着。
    读了那人类心中的想法以后,她又吃了一惊。
    她们的心中,几乎没有任何关于怨灵和间歇泉的情报。
    觉诧异了,她决定先试探一下她们。
    """
    for x in jieba.analyse.extract_tags(sentence, withWeight=True):
        """
        接收参数以下:
        sentence:句子
        topK:返回几个 TF/IDF 权重最大的关键词,默认值为20
        withWeight:是否一并返回关键词权重值,默认值为 False
        allowPOS:仅包括指定词性的词,默认值为空
        """
        print(x)
    """
    ('宠物', 0.42209719717412125)
    ('地灵', 0.31035309971636366)
    ('地狱', 0.29652634405236367)
    ('怨灵', 0.2898125455248485)
    ('灼热', 0.16584643925200002)
    ('交给', 0.1567760269529697)
    ('管理', 0.14164445757030303)
    ('异变', 0.13837298184484847)
    ('间歇泉', 0.13345825326181818)
    ('她们', 0.11076269718599999)
    ('交由', 0.10921610331818181)
    ('人类', 0.10237571981272728)
    ('心中', 0.09523635988763636)
    ('遗迹', 0.09067494210703031)
    ('想法', 0.08044421223127274)
    ('充满', 0.07707872184351516)
    ('由于', 0.07360687520381819)
    ('灵们', 0.07245313638121212)
    ('读心', 0.07245313638121212)
    ('鸦等', 0.07245313638121212)
    """
  • 基于 TextRank 算法的关键词提取

    import jieba
    import jieba.analyse
    
    sentence = """
    
    地灵殿的主人。
    虽然地底都市已经被排除在地狱以外,但那些曾经是地狱设施的遗迹里
    依然还残留着无数充满怨念的灵们,于是必须有人对他们进行管理。
    在灼热地狱遗址上创建起了地灵殿,她就在那里居住了下来。
    由于她可以读取他人心中的想法,不论是任何妖怪,怨灵都为之感到恐惧,
    不知从什么时候起几乎没有人再来地灵殿造访了。
    可是,相反由于能读心而受到那些不会说话的动物们的喜好,地灵殿逐渐
    变成了充满火焰猫,地狱鸦等宠物们的房屋。
    由于宠物的增多结果致使灼热地狱遗迹没法完美的管理,最后只得把不少
    管理事项交由宠物们去作。
    把宠物的管理交给宠物去作。
    把庭院的修缮交给宠物去作。
    把陪妹妹玩的工做交给宠物去作,如此。
    可是,忽然出现不该该出现的地上的人类,在据说怨灵和间歇泉异变
    以后她大吃一惊。
    怨灵的管理她交由阿燐去作,灼热地狱的火力调节则交给了阿空。
    她们应该都是忠心于觉不会作什么坏事才对。她相信决不会发生
    什么异变才对。
    搞很差,也许是眼前这我的类撒谎有什么别的企图,她这么想着。
    读了那人类心中的想法以后,她又吃了一惊。
    她们的心中,几乎没有任何关于怨灵和间歇泉的情报。
    觉诧异了,她决定先试探一下她们。
    """
    for x in jieba.analyse.textrank(sentence, withWeight=True):
        """
        接收参数以下,和extract_tags参数一致,但allowPOS默认值不会空:
        sentence:句子
        topK:返回几个 TF/IDF 权重最大的关键词,默认值为20
        withWeight:是否一并返回关键词权重值,默认值为 False
        allowPOS:仅包括指定词性的词,默认值不为空
        """
        print(x)
    """
    ('宠物', 1.0)
    ('地狱', 0.8169410022497963)
    ('管理', 0.7111631257164159)
    ('怨灵', 0.6872520018950034)
    ('交给', 0.5766849288790858)
    ('不会', 0.5671709845112852)
    ('地灵', 0.5418423145115177)
    ('人类', 0.4235967140492308)
    ('怨念', 0.40976053284203795)
    ('遗迹', 0.3890312542892664)
    ('出现', 0.38728082208337444)
    ('异变', 0.3678994864195963)
    ('间歇泉', 0.3523723288507097)
    ('致使', 0.3217237709168045)
    ('读心', 0.3193653873378865)
    ('受到', 0.29192544019397326)
    ('据说', 0.2910761395893028)
    ('说话', 0.28670968889003423)
    ('动物', 0.28639826197065527)
    ('试探', 0.2805685960379144)
    """

词性标注

jieba.cut只是分词,其实jieba.posseg.cut在分词的时候还能给出词性it

import jieba.posseg

sentence = "古明地觉是一个可爱的女孩子"
# 这里的tag表示单词的词性,nr表示人名
jieba.add_word("古明地觉", tag="nr")
for k, v in jieba.posseg.lcut(sentence):
    print(k, v)
"""
古明地觉 nr
是 v
一个 m
可爱 v
的 uj
女孩子 n
"""
# n: 名词  ns: 地名  vn: 名动词  v: 动词  nr: 人名,不在这里面的会被过滤掉

返回词语的位置

在分词的时候,除了返回分好的,还能够返回词语的开始位置和结束位置ast

import jieba

sentence = "古明地觉是一个可爱的女孩子"
for k, start, last in jieba.tokenize(sentence):
    print(k, start, last, sentence[start: last])
"""
古明 0 2 古明
地觉 2 4 地觉
是 4 5 是
一个 5 7 一个
可爱 7 9 可爱
的 9 10 的
女孩子 10 13 女孩子
"""
相关文章
相关标签/搜索