自然语言处理---结巴分词

本文探讨了jieba分词的精确模式、全模式和搜索引擎模式的对比,详细展示了不同模式下的分词结果。此外,还介绍了如何进行高频词提取,并给出了一段文本的分词效果及top10高频词。
摘要由CSDN通过智能技术生成

结巴分词jieba

  • 结巴分词三种模式
    精确模式: 试图将句子最精确切开
    全模式: 所有可以成词的语句都扫描出来,速度快,不能解决歧义
    搜索引擎模式:在精确模式的基础上对长词再次划分,提高召回率

jieba分词的三种模式的对比1

#jieba分词的三种模式的对比
import jieba

text='在精确模式的基础上对长词再次划分提高召回率'
text_list = jieba.cut(text,cut_all=True)
print('全模式:')
print('/'.join(text_list))

print('精确模式:')
text_list = jieba.cut(text,cut_all =  False)
print('/'.join(text_list))

print('默认模式是精确模式:')
text_list = jieba.cut(text)
print('/'.join(text_list))

print('搜索引擎模式:')
text_list = jieba.cut_for_search(text)
print('/'.join(text_list))

结果

全模式:
在/精确/模式/的/基础/上/对/长/词/再次/划分/提高/召回/率
精确模式:
在/精确/模式/的/基础/上/对/长词/再次/划分/提高/召回/率
默认模式是精确模式:
在/精确/模式/的/基础/上/对/长词/再次/划分/提高/召回/率
搜索引擎模式:
在/精确/模式/的/基础/上/对/长词/再次/划分/提高/召回/率

高频词提取

主要需要排除干扰项:
   标点符号
   停用词
#数据读取
def get_content(path):
    with open(path,'r',encoding='gbk',errors='ignore') as f:
        content=''
        for line in f:
            line=line.strip()#去掉每句话开头和结尾的空格
            content+=line
        return content

def stop_words(path):
    with open(path,'r',encoding='utf-8',errors='ignore') as f:
        return [line.strip() for line in f]

#定义一个高频词函数
def get_TF(words ,topK = 10):
    tf_dic = {}
    for w in words:
        tf_dic[w] = tf_dic.get(w,0)+1#遍历words中的每一个词切片,以词为键,出现的次数为值存储在字典中

    return sorted(tf_dic.items(),key = lambda x:x[1],reverse=True)[:topK]

def main():
    import glob
    import random
    import jieba

    #获取到/data/news/C000013/路径下的所有txt文件的路径
    files  =glob.glob('./data/news/C000013/*.txt')

    #读取所有文件的内容存在corpus的列表中
    corpus = [get_content(x) for x in files]

    #获取一个0到corpus长度的整数随机数
    sample_inx = random.randint(0,len(corpus))

    #使用jieba精确模式分词,
    #split_words = list(jieba.cut(corpus[sample_inx]))
    split_words = [x for x in jieba.cut(corpus[sample_inx]) if x not in stop_words('./data/stop_words.utf8')]
    #打印随机选取的样本
    print('样本之一:'+corpus[sample_inx])
    #打印随机选取的样本的分词情况
    print('样本分词效果:'+'/'.join(split_words))
    #统计显示高频词
    print('样本的topK(10)词:'+str(get_TF(split_words)))
main()

结果

样本之一:中药注射剂是我国独创的新剂型,具有生物利用度高,作用迅速等特点,能较好地发挥中药治疗急病重症的作用。有人预测,中药注射剂将是我国制药产业未来开拓国际市场独具优势的项目。……….
样本分词效果:中药/注射剂/我国/独创/新/剂型/具有/生物/利用/度高/作用/迅速/特点/发挥/中药/治疗/急病/重症/作用/有人/预测/中药/注射剂/我国/制药/产业/未来/开拓/国际/市场/独具/优势/项目………
样本的topK(10)词:[(‘中药’, 33), (‘注射剂’, 26), (‘不良反应’, 20), (‘中’, 10), (‘发生’, 8), (‘减少’, 7), (‘企业’, 7), (‘药品’, 7), (‘研发’, 6), (‘生产’, 6)]


' ' 窗口启动的时候,初始化类会把数据库载入内存,以增加运算速度,所以占用内存稍微大一点,如果不喜欢,可以修改类初始化部分{方初始化()} ' 子重置词典数据库() 这个功能用于自定义词库,吧文本词库转换为sqlite数据库词库 ' 词库文件保存在运行目录kic.txt ' 词库数据库为disk.db ' 词库数据保存在sqlite数据库中,没有找到更好的,更快的查找文本的方式,只能先用数据库了 在 子重置词典数据库(),和 方初始化() 这两个方法(函数)中有一定的信息框的错误提示,实际应用最好改成其他提示方式,而且提示错误后程序并不会终止,需要主程序自己判断 词库比较小,分词精度估计不高大,建议实际应用的时候才用更大,跟完整的词库,最好根据内容的相关性这样最好. 提供一个我自己用的词库,主要用于购物网站的分词的,在程序文件夹得kic1.txt里面 修改成kic.txt 然后重新生成数据库就行了 ' 此文件算法根据织梦中文分词php版本的简化版本修改而来,如果用于商业请自行考虑版权问题 '关键字自动获取php源码 这个文件夹里面的就是原来的php文件,应该是老版本的织梦cms里面提取出来的....这是一个简化版本的分词程序 .简化了一些算法,我也是根据这个php文件修改而来的.所以这个分词算法用于提权关键字是比较合适的 .用于更高的要求估计还不够合适 .sqlite采用的是kyozy的sqlite模块,因为他的模块可以吧数据库读入内存... .程序中还有许多可以提升速度的地方....比如说使用的数据库感觉应该有很好的方法...但是没有找到 .欢迎大家指正..做的更好 ' 作者: www.liuxingou.com 十年一剑
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值