Python自然语言处理NLP(四)

学习地址

中文分词

  1. 基于词典、词库匹配

    • 正向最大匹配
    • 逆向最大匹配
    • 双向最大匹配
    • 设立切分标志法
    • 最佳匹配
  2. 基于词频度统计

    • N-gram模型
    • 隐马尔科夫模型
    • 基于字标注的中文分词方法
  3. 基于规则(语义、理解)的分词

2019-09-25-14-12-42-e5bf2b9fed9b2289.png

概率语言模型的分词方法

2019-09-25-14-22-23-d8f00fbeb4e4ebc3.png

结巴分词jieba

安装:pip install jieba
功能
  1. 分词
    jieba.cut或者jieba.lcut直接获取列表
    jieba.cut_for_search或者jieba.lcut_for_search
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    import  jieba
    a='我是一个粉刷匠,粉刷本领强'
    b='我来自北京青花大学'
    a=jieba.cut(a,cut_all=False,HMM=True) # cut_all is full/accurate pattern, HMM is Hidden Markov Model
    b=jieba.cut(b,cut_all=True,HMM=False) # 全模式(各种可能都显示),不使用模型,默认精确模式会显示概率最大的切分方法
    print(type(a)) # <class 'generator'>
    print(' '.join(a)) # 我 是 一个 粉刷 匠 , 粉刷 本领 强
    print('/'.join(b)) # 我/来自/北京/青花/大学

    b='小明毕业于中国科学院计算所,后在日本京都大学深造'
    b=jieba.lcut_for_search(b)
    print(b) # ['小明', '毕业', '于', '中国', '科学', '学院', '科学院', '中国科学院', '计算', '计算所', ',', '后', '在', '日本', '京都', '大学', '日本京都大学', '深造']
  1. 词典

    1
    2
    3
    4
    jieba.load_userdict(path) # 添加词典,将一些新的词汇导入进来,如云计算大数据等
    jieba.add_word(word,freq=None,tag=None) # 手动添加词汇
    jieba.del_word(word) # 手动删除词汇
    jieba.suggest_freq(segment,tune=True) # 表示不切分segment,False表示切分
  2. 关键词提取

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    import jieba.analyse
    text='北京时间9月25日8时54分,中国在酒泉卫星发射中心用长征二号丁运载火箭,成功将云海一号02星发射升空,卫星顺利进入预定轨道,任务获得圆满成功'
    for x,w in jieba.analyse.extract_tags(text,topK=20,withWeight=True): #基于TF-IDF提取关键词,topK参数默认20靠前的关键词,withWeigth默认False不返回关键词权重,其他参数查看手册
       print(x,w)
    jieba.analyse.set_idf_path(file_path) # 使用自己的语料库
    jieba.analyse.set_stop_words(file_path) # 使用自己的停用词库过滤关键词
    print('~~~~~~~~~~~~~~~~~~~~')
    for x,w in jieba.analyse.textrank(text,topK=20,withWeight=True): # 基于TextRank,其余一致
       print(x,w)

    - - - - - - - - - - - - - - - - - - - -
    长征二号 0.6318489841818182
    酒泉卫星发射中心 0.6003422941545454
    25 0.5433985228590908
    02 0.5433985228590908
    54 0.5433985228590908
    圆满成功 0.46771635178636367
    升空 0.44005317940000005
    云海 0.43745506968
    运载火箭 0.4153865325990909
    一号 0.38291882272909095
    预定 0.3607771958345455
    卫星 0.3272702973831818
    轨道 0.31525442301681816
    顺利 0.30144352380818185
    发射 0.2976179877936364
    任务 0.25559143141454543
    成功 0.24109631387181818
    获得 0.22140456289909088
    北京 0.21215465039636364
    进入 0.2073690901
    时间 0.18543361965727276
    中国 0.13760548575727272
    ~~~~~~~~~~~~~~~~~~~~
    进入 1.0
    预定 0.9283963898515567
    轨道 0.9229732862562409
    任务 0.9169044924501285
    发射 0.7989776734747804
    时间 0.7986657144130873
    北京 0.7932598978102895
    获得 0.6955318819575269
    升空 0.6591076489124493
    云海 0.43964818485620233
  3. 词形标注与分词位置

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    import jieba.posseg
    text='我爱吃北京烤鸭'
    for word,flag in jieba.posseg.cut(text):
    print(word,flag)
    result=jieba.tokenize('永和服装有限公司')
    for tk in result:
       print(tk[0],tk[1],tk[2]) # 分词,分词的起始和终止位置

    - - - - - - - - - - - - - - - -
    我 r
    爱 v
    吃 v
    北京烤鸭 n
    永和 0 2
    服装 2 4
    有限公司 4 8

参考资料

  1. 自然语言处理NLP中的N-gram模型
  2. Python的jieba分词及提取关键字