精华内容
下载资源
问答
  • ltp分词
    千次阅读
    2019-01-28 15:10:30
    from pyltp import Segmentor
    import jieba
    
    model_path = "E:/ltp3_4/cws.model"
    content = "我毕业于清华大学,我朋友的名字叫戴掵莉,我哥们的名字叫付先军;阿尔艾斯是我的村庄名字"
    
    seg = Segmentor()
    seg.load(model_path) # 加载语言模型 用于分词
    words = seg.segment(content)
    seg_words = " ".join(words)
    print("LTP: ", " /".join(words))
    jiebaWords = jieba.cut(content, HMM=True)
    print("jieba: ", " /".join(jiebaWords))
    print(seg_words)
    
    # 词性标注
    from pyltp import Postagger
    
    pos = Postagger()
    model_path = "E:/ltp3_4/pos.model"
    
    pos.load(model_path) # 导入词性标注模型
    pos_words = pos.postag(seg_words.split(" "))
    for word, pt in zip(seg_words.split(" "), pos_words):
        print(word + "/" + pt)
    
    """ 
    从分词结果上来看,对于新词的识别ltp分词方法远高于结巴分词
    """
    更多相关内容
  • ltp 分词模型

    2019-01-07 16:40:53
    ltp3.4.0 python 版本的分词模型,百度网盘下载太慢,我同时还找到了 windows 版本,具体详见: nlp demo 系列博文 https://blog.csdn.net/wangyaninglm/article/details/83479837 本下载资源免费,如有需要,请参照...
  • 里面包括ltp分词模型、pos模型、ner模型、解析模型等。
  • ltp分词后处理——强制分词模块

    千次阅读 2018-07-09 17:53:05
    官方解释为:ltp分词(词性标注)模块 并非采用词典匹配的策略 ,外部词典以特征方式加入机器学习算法,并不能保证所有的词都是按照词典里的方式进行切分(标注)。 如果要完全按照词典匹配的方式切词(标注),您...

    为了解决这个问题:我使用分词(词性标注)词典了,但是为什么某些词典词还是被切开了(词性没有按照字典标注)
    官方解释为:ltp的分词(词性标注)模块 并非采用词典匹配的策略 ,外部词典以特征方式加入机器学习算法,并不能保证所有的词都是按照词典里的方式进行切分(标注)。 如果要完全按照词典匹配的方式切词(标注),您可以尝试对结果进行后处理。
    为此我自己写了一个后处理模块,用来将切开了的词进行合并(保证同一句话中出现多次不能拆分的词,也能正确合并)。

    主要思路如下:

    1. 构建一个强制分词词典
    2. 从强制分词词典生成正则表达式以加速词典查找过程
    3. 如果待分词的句子包含强制分词词典中的词,将切开的词进行合并,否则跳过。

    测试了三种词查找方法的效率:

    • 将词拼接成形如(?:钢铁是怎样炼成的|钢铁侠)的正则表达式后编译,再用search效率最高。(事先编译需要消耗一定的时间,但是这个可以放在在初始化过程中,只用计算一次)
    • 遍历词典,用if word in sentence:来判断效率其次。
    • 遍历词典,用if sentence.find(word)>-1:来判断效率最低。

    强制分词模块代码如下:

    class ForceSegmentor(object):
        def __init__(self):
            self.forcelist = []
    
        def load(self, filepath):
            with open(filepath, 'r') as file:
                line = file.readline()
                while line:
                    if ('#' in line):
                        line = file.readline().strip()
                        continue
                    self.forcelist.append(ForceSegmentorItem(line))
                    line = file.readline()
            self.compilelist = []
            y = 0
            xlen = 60
            stop = False
            while not stop:
                comstr = '(?:'
                for x in range(xlen):
                    z = y * xlen + x
                    if z > len(self.forcelist) - 1:
                        stop = True
                        break
                    if x > 0:
                        comstr += '|'
                    comstr += self.forcelist[z].get_text()
                comstr += ')'
                self.compilelist.append(re.compile(comstr.decode('utf8')))
                y += 1
        def find_in_dict(self,sentence):
            de_sentence = sentence.decode('utf8')
            for compilestr in self.compilelist:
                result=compilestr.search(de_sentence)
                if result:
                    #找到句子中包含的字典中的词
                    return result.group().encode('utf8')
            return None
        
        def merge(self, sentence, words):
            # 有些词无法通过自定义分词词典直接正确划分,用该方法将属于强制词典的多个词合并
            # 例:“《钢铁是怎样炼成的》的主演是谁电影《钢铁是怎样炼成的》的主演是谁”得到
            # “《 钢铁是怎样炼成的 》 的 主演 是 谁 电影 《 钢铁是怎样炼成的 》 的 主演 是 谁”
            result = words
            found_word=self.find_in_dict(sentence)
            if found_word:
                # 可能同一个词在这句话里出现多次
                indexs_start = []
                # 合并的词首尾距离
                index_distance = 0
                index_start = -1
                strm = ''
                for i, word in enumerate(words):
                    wl = len(word)
                    if (index_start == -1 and word == found_word[0:wl]):
                        index_start = i
                        strm += word
                    elif (index_start != -1):
                        strm += word
                        if (strm == found_word):
                            # 已经完全匹配
                            indexs_start.append(index_start)
                            index_distance = i - index_start + 1
                            index_start = -1
                            strm = ''
                        elif (strm not in found_word):
                            # 现在连接得到的多个词是错误的,重新开始匹配
                            index_start = -1
                            strm = ''
                result = []
                i = 0
                while (i < len(words)):
                    word = words[i]
                    if (i in indexs_start):
                        result.append(found_word)
                        i += index_distance
                    else:
                        result.append(word)
                        i += 1
            return result
    
    class ForceSegmentorItem(object):
        def __init__(self, line):
            self.text = line.replace('\n', '')
    
        def get_text(self):
            return self.text
    

    调用方法:

    	ws = self.segmentor.segment(new_sentence.encode('utf8'))
        words = list(ws)#调用默认的ltp分词得到的分词结果
    	forceSegmentor= ForceSegmentor()
        forceSegmentor.load('../init_data/cws.lex')
        words = forcesegmentor.merge(sentence, words)#强制分词以后的结果
        
    

    附词典查找效率对比代码:

        def find_word(self):
            wlist=[]
            #测试大词典下的效果,forcelist词典本身70个词,wlist扩大10000倍
            for i in range(10000):
                wlist.extend(self.forcelist)
            import datetime
            sentence='《钢铁是怎样炼成的》的主演是谁电影《钢铁是怎样炼成的》的主演是谁'
    
            de_sentence= sentence.decode('utf8')
            begin = datetime.datetime.now()
            a=0
            for fi in wlist:
                fw = fi.get_text()
                if sentence.find(fw)>-1:
                    a += 1
    
            end = datetime.datetime.now()
            k = end - begin
            print 'find方法-找到次数:%s,耗时:%s' %(a, k.total_seconds())
    
            begin = datetime.datetime.now()
            a = 0
            for fi in wlist:
                fw = fi.get_text()
                if (fw in sentence):
                    a+=1
    
            end = datetime.datetime.now()
            k=end-begin
            print 'in方法-找到次数:%s,耗时:%s' %(a, k.total_seconds())
    
    
            compilelist=[]
            y=0
            xlen=60#每个编译语句中包含词的数量,根据词典大小调整可以进一步调高效率
            stop=False
            while not stop:
                comstr='(?:'
                for x in range(xlen):
                    z=y*xlen+x
                    if z>len(wlist)-1:
                        stop=True
                        break
                    if x>0:
                        comstr+='|'
                    comstr+=wlist[z].get_text()
                comstr+=')'
                compilelist.append(re.compile(comstr.decode('utf8')))
                y+=1
    
            begin = datetime.datetime.now()
            a = 0
            for compilestr in compilelist:
                result=compilestr.search(de_sentence)
                if result:
                    g=result.group()
                    a += 1
    
            end = datetime.datetime.now()
            k = end - begin
            print '正则方法-找到次数:%s,耗时:%s' %(a, k.total_seconds())
    

    结果:

    find方法-找到次数:10000,耗时:0.169297
    in方法-找到次数:10000,耗时:0.094882
    正则方法-找到次数:10000,耗时:0.00471
    
    展开全文
  • LTP分词使用文档目录#简介LTP的分词模块基于结构化感知器(Structured Perceptron)算法构建,具有准确率高、速度快等优点;同时支持用户自定义词典,适应不同用户的需求;另外还新增了个性化(增量式)训练功能,...
  • 在home目录下安装项目代码与模型文件,文件夹名称分别为 pyltp 与 ltp_data_v3.4.0 在pyltp目录下,新建三个文件夹sourceWords,targetWords,zidian,script分别存放原语料,目标语料,字典文件,模型文件(将...

    python版本官方项目地址pyLTP
    官方文档
    本机环境:ubuntu16.04 python3.6
    安装项目代码与模型文件 官方地址
    在home目录下安装项目代码与模型文件,文件夹名称分别为 pyltp 与 ltp_data_v3.4.0
    在pyltp目录下,新建三个文件夹sourceWords,targetWords,zidian,script分别存放原语料,目标语料,字典文件,模型文件(将刚才下载好的模型文件放到该目录下)
    同时创建分词的py文件 setup.py

    代码如下

    # -*- coding: utf-8 -*-
    import os
    LTP_DATA_DIR = './script'  # ltp模型目录的路径
    cws_model_path = os.path.join(LTP_DATA_DIR, 'cws.model')  # 分词模型路径,模型名称为`cws.model`
    
    from pyltp import Segmentor
    segmentor = Segmentor()  # 初始化实例
    segmentor.load_with_lexicon(cws_model_path, './zidian/kong.txt') # 加载模型,第二个参数是您的外部词典文件路径
    f = open('./sourceWords/zh_yuliao.txt', 'r', encoding='utf-8')
    f_new = open('./targetWords/zh_yuliao_ltp.txt', 'w', encoding='utf-8')
    for i in f:
    	words = segmentor.segment(i)
    	newWords = ' '.join(words) + '\n'
    	f_new.write(newWords)
    f.close()
    f_new.close()
    segmentor.release()
    

    该目录下运行python3 setup.py


    目前市面上的中文分词工具有很多,有不同的优缺点,阅读了很多博客和文章,结巴分词时推荐较多的,但是在2018年的AI Challenger英中文本机器翻译赛道中决赛答辩选手几乎都使用的哈工大LTP分词,其他文本赛道使用LTP分词的也很多,实际应用过程中应该多做尝试,控制变量寻求最优的分词方法。
    推荐一个公众号:AINLP
    在公众号里输入: 中文分词 我也想过过过儿过过的生活
    会出现各大分词工具的分词结果,挺有意思的,之前的一篇文章有过简单介绍,有兴趣的可以试试(这句话实验结果LTP分词效果并不好,最好的是jieba和PKUSeg,有意思)

    展开全文
  • LTP分词与词性标注(使用用户词典)

    千次阅读 热门讨论 2017-11-12 16:53:07
    #必须先分词再词性标注 words_and_pos = zip(words,postags) words_and_pos.append(( '$' , '$' )) #'$'作为判断一句话结束的标志 for word,pos in words_and_pos: if word != '$' : file_write_pos....
    #coding:utf-8
    
    from pyltp import Segmentor
    from pyltp import Postagger
    
    def read_and_seg_pos(file_dir):
        segmentor = Segmentor()
        postagger = Postagger()
        segmentor.load_with_lexicon("模型地址/cws.model","用户词典/fulluserdict")
        postagger.load_with_lexicon("模型地址/pos.model","用户词典/fulluserdict")
        #用户词典为纯文本,第一列为词,第二列为词性
        file_read = open(file_dir,"r")
        texts = file_read.readlines()    #这里是一次性全部读取,对于大语料,往往采用readline(),一次读取一行
        file_write_seg = open(file_dir+"_seg","w")
        file_write_pos = open(file_dir+"_pos","w")
        for text in texts:
            words = segmentor.segment(text)#分词
            file_write_seg.write(" ".join(words)+"\n")#将以空格分好的词写入文档
            postags = postagger.postag(words)         #必须先分词再词性标注
            words_and_pos = zip(words,postags)
            words_and_pos.append(('$','$'))   #'$'作为判断一句话结束的标志
            for word,pos in words_and_pos:
                if word != '$':
                    file_write_pos.write(word+" "+pos+" ")
                else:
                    file_write_pos.write('\n')
    
    
        file_read.close()
        file_write_seg.close()
        file_write_pos.close()
        segmentor.release()
        postagger.release()
    
    read_and_seg_pos("./corpus")
    
    展开全文
  • 解决windows下无法运行哈工大的分词数据,相比较于其他的分词工具,如jieba和中科院等等,做出一个比较,以便更好的优化分词质量
  • LTP是哈工大开源的一套中文语言处理系统,涵盖了基本功能:分词、词性标注、命名实体识别、依存句法分析、语义角色标注、语义依存分析等。【开源中文分词工具探析】系列:1. 前言同THULAC一样,LTP也是基于结构化...
  • 使用同一份语料训练两个分词库,同一份测试数据测试两个分词库的性能。 语料库选取1998年01月的人民日报语料库。199801人民日报语料 该词库带有词性标注,为了遵循LTP的训练数据集格式,需要处理掉词性标注。 ...
  • ltp是哈工大出品的自然语言处理工具箱, pyltp是python下对ltp(c++)的封装. 在linux下我们很容易的安装pyltp, 因为各种编译工具比较方便. 但是在windows下需要安装vs并且还得做一些配置, 因为我服务的人都是在windows...
  • 初步了解中文NLP工具jieba和LTP--分词+词性标注功能
  • LTP(Language Technology Platform) 提供了一系列中文自然语言处理工具,用户可以使用这些工具对于中文文本进行分词、词性标注、句法分析等等工作。 If you use any source codes included in this toolkit in ...
  • 介绍:语言技术平台(LTP) 提供包括中文分词、词性标注、命名实体识别、依存句法分析、语义角色标注等丰富、高效、精准的自然语言处理技术。经过 哈工大社会计算与信息检索研究中心 11 年的持续研发和推广,LTP已经...
  • 前言LTP语言云平台不支持离线调用;支持分词、词性标注、命名实体识别、依存句法分析、语义角色标注;不支持自定义词表,但是你可以先用其他支持自定义分词的工具(例如支持C#、Go、Java、JavaScript、Nodejs、PHP、...
  • 哈工大LTP和中科院NLPIR中文分词比较

    万次阅读 2016-04-17 18:00:35
    个人实验总结,仅供参考。...2.NLPIR分词有两种方式,分词结果完全一致。 (1)利用分词函数NLPIR_ParagraphProcess; (2)利用NLPIR_FileProcess对整个文本进行分词。 其中第(2)种有时候会出现bug,分词进行到文
  • 哈工大语言技术平台LTP(Language Technology Platform)提供了一系列中文自然语言处理工具,用户可以使用这些工具对于中文文本进行分词、词性标注、句法分析等等工作。LTP本身是基于C++开发的,不过官方也提供了...
  • 目录0.内容梗概1. 基于传统统计算法的分词组件1.1 hanlp : Han Language Processing1.2 语言技术平台(Language Techno...
  • 文本挖掘--LTP-cloud 分词

    千次阅读 2016-02-26 10:07:47
    http://www.ltp-cloud.com/document/ ... LTP 基于 XML 的语言处理结果表示,并在此基础上提供了一整套自底向上的丰富、高效、高精度的中文自然语言处理模块 ,其中包括词法、句法、语义等 5项中
  • 为了验证分词效率的,数据统一采用网信微博数据,共3379kb,共3382条。所有样本先采用规则分句,再进行分词和实体识别,standfordCorenlp部署的服务自带分句,则没有进行分句,分词和实体识别运行时间不计算初始化...
  • 图中从上往下分别是依存句法分析、分词、词性标注、语义角色标注、语义依存分析的处理过程。 具体可直接参考哈工大LTP官网,也许会对你有更多启发: 语言技术平台( Language Technology Plantform | LTP ) ...
  • LTP和THULAC的安装与分词工具的使用

    千次阅读 2018-11-22 14:16:19
    LTP分词工具使用说明: 提前准备: 1. LTP项目文件 :ltp-3.4.0.tar.gz 2. LTP模型文件 :ltp_data_v3.4.0.zip 分别将上述文件进行解压: 执行命令:tar -zxv -f ltp-3.4.0.tar.gz ,解压后的文件为 ltp-3.4.0 ...
  • LTP与THULAC分词用户字典使用技巧

    千次阅读 2019-04-19 17:36:20
    最近做关系抽取时需要用到分词工具。 尝试对下面一句话进行分词: 韩国瑜此前就曾邀鸿海来高雄投资。 分词后: 韩国 瑜 此前 就 曾 邀鸿 海 来 高雄 投资 。 分词存在将(韩国瑜)分词为(韩国 瑜)的情况,...
  • LTP入门操作

    2021-07-23 17:01:59
    LTP 安装直接pip install ltp,这个是官方地址https://ltp.readthedocs.io/zh_CN/latest/quickstart.html,里面有详细的介绍,我下面的代码只是方便我使用以及按照自己的需求进行修改 ...# 分词 segment, _ = ltp.seg

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,868
精华内容 747
关键字:

ltp分词