• jieba分词的几种形式


    1、精确模式:试图将句子最精确地分开,适合文本分析

     
    seg_list = jieba.cut(test_text, cut_all=False)
     
    seg_list = " ".join(seg_list)
     
    print("cut_all=False:", seg_list)
    

      

    输出:

    cut_all=False: 我 今天下午 打篮球
    

      

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

     
    seg_list2 = jieba.cut(test_text, cut_all=True)
     
    seg_list2 = " ".join(seg_list2)
     
    print("cut_all=True:", seg_list2)
    

      

    输出:

    cut_all=True: 我 今天 今天下午 天下 下午 打篮球 篮球
    

      

    我们可以发现,分词结果中有个 “天下”,显然这不是我们想要的词语,这属于噪声词。

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

     
    seg_list3 = jieba.cut_for_search(test_text)
     
    seg_list3 = " ".join(seg_list3)
     
    print("cut_for_search:", seg_list3)
    

      

    输出:

    cut_for_search: 我 今天 天下 下午 今天下午 篮球 打篮球
    

      

    命令行进行分词
    python -m jieba input.txt > output.txt
    

     

    词性分析

    import jieba.posseg as posseg
    
    text = "征战四海只为今日一胜,我不会再败了。"
    # generator形式形如pair(‘word’, ‘pos’)的结果
    seg = posseg.cut(text)  
    print([se for se in seg]) 
    
    # list形式的结果
    seg = posseg.lcut(text)
    print(seg)
    

      

    [pair('征战', 'v'), pair('四海', 'ns'), pair('只', 'd'), pair('为', 'p'), pair('今日', 't'), pair('一', 'm'), pair('胜', 'v'), pair(',', 'x'), pair('我', 'r'), pair('不会', 'v'), pair('再败', 'v'), pair('了', 'ul'), pair('。', 'x')]
    [pair('征战', 'v'), pair('四海', 'ns'), pair('只', 'd'), pair('为', 'p'), pair('今日', 't'), pair('一', 'm'), pair('胜', 'v'), pair(',', 'x'), pair('我', 'r'), pair('不会', 'v'), pair('再败', 'v'), pair('了', 'ul'), pair('。', 'x')]
    

      

    关键词抽取

    关键词抽取有两种算法,基于TF-IDF和基于TextRank:

    import jieba.analyse as analyse
    text = "征战四海只为今日一胜,我不会再败了。"
    # TF-IDF
    tf_result = analyse.extract_tags(text, topK=5) # topK指定数量,默认20
    print(tf_result)
    # TextRank
    tr_result = analyse.textrank(text, topK=5) # topK指定数量,默认20
    print(tr_result)
    

      

    ['一胜', '再败', '征战', '四海', '今日']
    ['一胜', '再败', '征战', '四海', '今日']
    

    完整用法

    分词

    jieba分词有三种不同的分词模式:精确模式、全模式和搜索引擎模式

    jieba.cut(sentence,cut_all=False,HMM=True) # 精确模式
    jieba.cut(sentence,cut_all=True,HMM=True) # 全模式
    jieba.cut_for_search (sentence, HMM=True) # 搜索引擎模式

    对应的,函数前加l即是对应得到list结果的函数:

    jieba.lcut(sentence,cut_all=False,HMM=True) # 精确模式
    jieba.lcut(sentence,cut_all=True,HMM=True) # 全模式
    jieba.lcut_for_search (sentence, HMM=True) # 搜索引擎模式
    sentence = "征战四海只为今日一胜,我不会再败了。"
    #---------------result----------------
    '今天天气 真 好' # 精确模式
    '今天 今天天气 天天 天气 真好' # 全模式
    '今天 天天 天气 今天天气 真 好' # 搜索引擎模式

    精确模式是最常用的分词方法,全模式会将句子中所有可能的词都列举出来,搜索引擎模式则适用于搜索引擎使用。具体的差别可在下一节工作流程的分析中详述。

    在上述每个函数中,都有名为HMM的参数。这一项表示是否在分词过程中利用HMM进行新词发现。关于HMM,本文附录中将简述相关知识。

    另外分词支持自定义字典,词典格式和 dict.txt 一样,一个词占一行;每一行分三部分:词语、词频(可省略)、词性(可省略),用空格隔开,顺序不可颠倒。
    具体使用方法为:

    jieba.load_userdict(file_name)  # 载入自定义词典
    jieba.add_word(word, freq=None, tag=None) # 在程序中动态修改词典
    jieba.del_word(word) 
    jieba.suggest_freq(segment, tune=True) # 调节单个词语的词频,使其能/不能被分词开

    关键词抽取

    关键词抽取的两个函数的完整参数为:

    jieba.analyse.extract_tags(sentence, topK=20, withWeight=False, allowPOS=(), withFlag=False)
    # topK 表示返回最大权重关键词的个数,None表示全部
    # withWeight表示是否返回权重,是的话返回(word,weight)的list
    # allowPOS仅包括指定词性的词,默认为空即不筛选。
    jieba.analyse.textrank(self, sentence, topK=20, withWeight=False, allowPOS=('ns', 'n', 'vn', 'v'), withFlag=False)
    # 与TF-IDF方法相似,但是注意allowPOS有默认值,即会默认过滤某些词性。

    并行分词

    可以通过

    jieba.enable_parallel(4) # 开启并行分词模式,参数为并行进程数,默认全部
    jieba.disable_parallel() # 关闭并行分词模式

    来打开或关闭并行分词功能。
    个人感觉一般用不到,大文件分词需要手动实现多进程并行,句子分词也不至于用这个。

  • 相关阅读:
    百斯特
    C++
    转载
    转载+整理
    转载
    转载
    转载
    C++
    转载
    CodeForces
  • 原文地址:https://www.cnblogs.com/LiuXinyu12378/p/13497659.html
Copyright © 2020-2023  润新知