• NLP—三种中文分词工具


      本文将对三种中文分词工具进行使用尝试,这三种工具分别为哈工大的LTP,结巴分词以及北大的pkuseg。
      首先我们先准备好环境,即需要安装三个模块:pyltp, jieba, pkuseg以及LTP的分词模型文件cws.model。在用户字典中添加以下5个词语:


    少安
    贺凤英
    F-35战斗机
    埃达尔·阿勒坎

      测试的Python代码如下:

    # -*- coding: utf-8 -*-
    
    import os
    import jieba
    import pkuseg
    from pyltp import Segmentor
    
    lexicon = ['', '少安', '贺凤英', 'F-35战斗机', '埃达尔·阿勒坎'] # 自定义词典
    
    # 哈工大LTP分词
    def ltp_segment(sent):
        # 加载文件
        cws_model_path = os.path.join('data/cws.model') # 分词模型路径,模型名称为`cws.model`
        lexicon_path = os.path.join('data/lexicon.txt') # 参数lexicon是自定义词典的文件路径
        segmentor = Segmentor()
        segmentor.load_with_lexicon(cws_model_path, lexicon_path)
        words = list(segmentor.segment(sent))
        segmentor.release()
    
        return words
    
    # 结巴分词
    def jieba_cut(sent):
        for word in lexicon:
            jieba.add_word(word)
        return list(jieba.cut(sent))
    
    # pkuseg分词
    def pkuseg_cut(sent):
        seg = pkuseg.pkuseg(user_dict=lexicon)
        words = seg.cut(sent)
        return words
    
    sent = '尽管玉亭成家以后,他老婆贺凤英那些年把少安妈欺负上一回又一回,怕老婆的玉亭连一声也不敢吭,但少安他妈不计较他。'
    #sent = '据此前报道,以色列于去年5月成为世界上第一个在实战中使用F-35战斗机的国家。'
    #sent = '小船4月8日经长江前往小鸟岛。'
    #sent = '1958年,埃达尔·阿勒坎出生在土耳其首都安卡拉,但他的求学生涯多在美国度过。'
    
    print('ltp:', ltp_segment(sent))
    print('jieba:', jieba_cut(sent))
    print('pkuseg:', pkuseg_cut(sent))

      对于第一句话,输出结果如下:

    原文: 尽管玉亭成家以后,他老婆贺凤英那些年把少安妈欺负上一回又一回,怕老婆的玉亭连一声也不敢吭,但少安他妈不计较他。

    ltp: ['尽管', '玉亭', '成家', '以后', ',', '他', '老婆', '贺凤英', '那些', '年', '把', '少安', '妈', '欺负', '上', '一', '回', '又', '一', '回', ',', '怕', '老婆', '的', '玉亭', '连', '一', '声', '也', '不', '敢', '吭', ',', '但', '少安', '他妈', '不', '计较', '他', '。']

    jieba: ['尽管', '玉亭', '成家', '以后', ',', '他', '老婆', '贺凤英', '那些', '年', '把', '少安', '妈', '欺负', '上', '一回', '又', '一回', ',', '怕老婆', '的', '玉亭', '连', '一声', '也', '不敢', '吭', ',', '但少安', '他妈', '不', '计较', '他', '。']

    pkuseg: ['尽管', '玉亭', '成家', '以后', ',', '他', '老婆', '贺凤英', '那些', '年', '把', '少安', '妈', '欺负', '上', '一', '回', '又', '一', '回', ',', '怕', '老婆', '的', '玉亭', '连', '一', '声', '也', '不', '敢', '吭', ',', '但', '少安', '他妈', '不', '计较', '他', '。']

      对于第二句话,输出结果如下:

    原文: 据此前报道,以色列于去年5月成为世界上第一个在实战中使用F-35战斗机的国家。

    ltp: ['据', '此前', '报道', ',', '以色列', '于', '去年', '5月', '成为', '世界', '上', '第一', '个', '在', '实战', '中', '使用', 'F-35', '战斗机', '的', '国家', '。']

    jieba: ['据此', '前', '报道', ',', '以色列', '于', '去年', '5', '月', '成为', '世界', '上', '第一个', '在', '实战', '中', '使用', 'F', '-', '35', '战斗机', '的', '国家', '。']

    pkuseg: ['据', '此前', '报道', ',', '以色列', '于', '去年', '5月', '成为', '世界', '上', '第一', '个', '在', '实战', '中', '使用', 'F-35战斗机', '的', '国家', '。']

      对于第三句话,输出结果如下:

    原文: 小船4月8日经长江前往小鸟岛。

    ltp: ['小船', '4月', '8日', '经长江', '前往', '小鸟岛', '。']

    jieba: ['小船', '4', '月', '8', '日经', '长江', '前往', '小', '鸟岛', '。']

    pkuseg: ['小船', '4月', '8日', '经', '长江', '前往', '小鸟', '岛', '。']

      对于第四句话,输出结果如下:

    原文: 1958年,埃达尔·阿勒坎出生在土耳其首都安卡拉,但他的求学生涯多在美国度过。

    ltp: ['1958年', ',', '埃达尔·阿勒坎', '出生', '在', '土耳其', '首都', '安卡拉', ',', '但', '他', '的', '求学', '生涯', '多', '在', '美国', '度过', '。']

    jieba: ['1958', '年', ',', '埃', '达尔', '·', '阿勒', '坎', '出生', '在', '土耳其', '首都', '安卡拉', ',', '但', '他', '的', '求学', '生涯', '多', '在', '美国', '度过', '。']

    pkuseg: ['1958年', ',', '埃达尔·阿勒坎', '出生', '在', '土耳其', '首都', '安卡拉', ',', '但', '他', '的', '求学', '生涯', '多', '在', '美国', '度过', '。']

      接着,对以上的测试情况做一个简单的总结:

      1. 用户词典方面:LTP和pkuseg的效果都很好,jieba的表现不尽如人意,这主要是因为自定义的字典的词语里面含有标点符号,关于该问题的解决办法,可以参考网址:https://blog.csdn.net/weixin_42471956/article/details/80795534

      2. 从第二句话的效果来看,pkuseg的分词效果应该是最好的,‘经’应该作为单个的词语切分出来,而LTP和jieba即使加了自定义词典,也没有效果,同理,‘F-35战斗机’也是类似的情形。

      总的来说,三者的分词效果都很优秀,差距不是很大,但在自定义词典这块,无疑pkuseg的效果更加稳定些。
      有关pkuseg的介绍与使用,可以参考网址:https://github.com/lancopku/PKUSeg-python



  • 相关阅读:
    岳麓山岳麓书院
    花洲书院
    《诫子书》诸葛亮
    AI ML DL
    台湾大学林轩田机器学习基石
    LeNet
    VGGNet
    AlexNet 2012
    AS 中 Plugin for Gradle 和 Gradle 之间的版本对应关系
    AndroidStudio、gradle、buildToolsVersion关系
  • 原文地址:https://www.cnblogs.com/chen8023miss/p/11447141.html
Copyright © 2020-2023  润新知