文档章节

逆向最大匹配分词

fyfyyy
 fyfyyy
发布于 2017/05/23 13:08
字数 282
阅读 23
收藏 0

最近学习Python 有学习任务 写一个逆向最大分词

import xlrd
import codecs
import os

#读取所有需要分词的文件路径
def eachFile(filepath):
    pathDir = os.listdir(filepath)
    paths_set = set()
    for i in pathDir:
        paths_set.add(os.path.join('/%s'%i))
    return paths_set
#读取文本内容
def readtxt(filepath):
    with open(filepath,'r',encoding='utf8') as f:
        sentences = f.readlines()
    f.close()
    return sentences
#将分词的结果存储
def writer_result(filepath,sentence):
    with codecs.open(filepath,'a',encoding='utf8') as w:
        w.write(sentence)
    w.close()

#读分词词典,词典中最长词长度
def get_seg_words(filepath):
    xl =xlrd.open_workbook(filepath)
    sheet = xl.sheet_by_index(0)
    words = sheet.col_values(1,1)
    max_index = 0
    word_dir = set()
    for word in words:
        word_dir.add(word)
        if len(word)>max_index:
            max_index = len(word)
    return word_dir,max_index
#读取停用词词典
def get_stop_words(filepath):
    xl = xlrd.open_workbook(filepath)
    sheet = xl.sheet_by_index(0)
    words = sheet.col_values(1, 1)
    stop_words = set()
    for word in words:
        stop_words.add(word)
    return stop_words


paths_set = eachFile('分词文本')

seg_words,max_index = get_seg_words(r'词表/words.xlsx')
stop_words = get_stop_words(r'词表/stopwords.xlsx')
for path in paths_set:
    print('begain : %s'%path)
    sentences = readtxt('分词文本'+path)
    for sentence in sentences:
        sentence = sentence.strip()
        start_index = 1
        end_index = len(sentence)
        result_sentence=''
        while start_index>0:
            for start_index in range(max(end_index-max_index,0),end_index,1):
                #print(sentence[start_index:end_index])
                if sentence[start_index:end_index] in stop_words:
                    break
                elif sentence[start_index:end_index] in seg_words or end_index == start_index+1:
                    str = sentence[start_index:end_index]
                    result_sentence=str+'/'+result_sentence
                    break
            end_index = start_index

        writer_result('result'+path,result_sentence)
        writer_result('result'+path,'\r\n')

© 著作权归作者所有

fyfyyy
粉丝 1
博文 7
码字总数 3228
作品 0
南京
私信 提问
NLP系列-中文分词(基于词典)

中文分词概述 词是最小的能够独立活动的有意义的语言成分,一般分词是自然语言处理的第一项核心技术。英文中每个句子都将词用空格或标点符号分隔开来,而在中文中很难对词的边界进行界定,难...

hiyoung
2018/09/20
0
0
中文分词算法 之 基于词典的逆向最小匹配算法

在之前的博文中介绍了基于词典的逆向最大匹配算法,比如我们切分句子: 中华人民共和国万岁万岁万万岁,使用逆向最大匹配算法的切分结果为:[中华人民共和国, 万岁, 万岁, 万万岁],可以看到,...

杨尚川
2014/04/04
925
0
中文分词算法 之 基于词典的逆向最大匹配算法

在之前的博文中介绍了基于词典的正向最大匹配算法,用了不到50行代码就实现了,然后分析了词典查找算法的时空复杂性,最后使用前缀树来实现词典查找算法,并做了3次优化。 下面我们看看基于词...

杨尚川
2014/03/21
764
1
word分词器、ansj分词器、mmseg4j分词器、ik-analyzer分词器分词效果评估

word分词是一个Java实现的中文分词组件,提供了多种基于词典的分词算法,并利用ngram模型来消除歧义。 能准确识别英文、数字,以及日期、时间等数量词,能识别人名、地名、组织机构名等未登录...

杨尚川
2014/04/29
10.5K
1
全文检索lucene中文分词的一些总结

全文检索几乎是所有内容管理系统软件(CMS)必备的功能,在对公司的CMS产品的开发维护过程中,全文检索始终是客户重点关注的模块,为满足客户各式各样越来越高的要求,对全文检索曾做过一段时...

空_明
2013/08/13
5.1K
1

没有更多内容

加载失败,请刷新页面

加载更多

自建redis笔记

自建redis笔记 最近在linux安装了一下redis,特做一些笔记! 本文先单节点启动redis,然后再进行持久化配置,在次基础上,再分享搭建主从模式的配置以及Sentinel 哨兵模式及集群的搭建 单节点...

北极之北
29分钟前
4
0
vue+element之多表单验证

方法一:利用promise var p1=new Promise(function(resolve, reject) { this.$refs[form1].validate((valid) => { if(valid){ ......

沉迷代码我爱学习
31分钟前
4
0
golang 1.13 errors 包 新函数介绍

引 这次 errors 包算重量级更新。很有更能把以前的一些设计模式给推到。下面聊下用法。 error 装包 以前返回一个错误,想要保存 error 链,还要定义结构体保存以前的 error 信息。感兴趣看下...

guonaihong
40分钟前
55
1
并发编程之线程池

一、线程池 1、什么是线程池 Java中的线程池是运用场景最多的并发框架,几乎所有需要异步或并发执行任务的程序 都可以使用线程池。在开发过程中,合理地使用线程池能够带来3个好处。 第一:降...

codeobj
42分钟前
6
0
知识点总结思维导图模板分享,良心安利,建议收藏

思维导图经常被用在学习中,对大脑思维进行发散,对知识进行记忆。使用思维导图可以让知识更加简单更有层次。下面是利用思维导图所绘制的几款知识点总结思维导图模板,大家可以进行进行参考使...

干货趣分享
45分钟前
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部