手记实用系列文章:

结巴分词和自然语言处理HanLP处理手记

Python中文语料批量预处理手记

自然语言处理手记

Python中调用自然语言处理工具HanLP手记

Python中结巴分词使用手记

代码封装类:

#!/usr/bin/env python
# -*- coding:utf-8 -*-
import jieba
import os
import re
import time
from jpype import * '''
title:利用结巴分词进行文本语料的批量处理
1 首先对文本进行遍历查找
2 创建原始文本的保存结构
3 对原文本进行结巴分词和停用词处理
4 对预处理结果进行标准化格式,并保存原文件结构路径
author:白宁超
myblog:http://www.cnblogs.com/baiboy/
time:2017年4月28日10:03:09
''' '''
创建文件目录
path:根目录下创建子目录
'''
def mkdir(path):
# 判断路径是否存在
isExists=os.path.exists(path)
# 判断结果
if not isExists:
os.makedirs(path)
print(path+' 创建成功')
return True
else:
pass
print('-->请稍后,文本正在预处理中...') '''
结巴分词工具进行中文分词处理:
read_folder_path:待处理的原始语料根路径
write_folder_path 中文分词经数据清洗后的语料
'''
def CHSegment(read_folder_path,write_folder_path):
stopwords ={}.fromkeys([line.strip() for line in open('../Database/stopwords/CH_stopWords.txt','r',encoding='utf-8')]) # 停用词表
# 获取待处理根目录下的所有类别
folder_list = os.listdir(read_folder_path)
# 类间循环
# print(folder_list)
for folder in folder_list:
#某类下的路径
new_folder_path = os.path.join(read_folder_path, folder)
# 创建一致的保存文件路径
mkdir(write_folder_path+folder)
#某类下的保存路径
save_folder_path = os.path.join(write_folder_path, folder)
#某类下的全部文件集
# 类内循环
files = os.listdir(new_folder_path)
j = 1
for file in files:
if j > len(files):
break
# 读取原始语料
raw = open(os.path.join(new_folder_path, file),'r',encoding='utf-8').read()
# 只保留汉字
# raw1 = re.sub("[A-Za-z0-9\[\`\~\!\@\#\$\^\&\*\(\)\=\|\{\}\'\:\;\'\,\[\]\.\<\>\/\?\~\!\@\#\\\&\*\%]", "", raw)
# jieba分词
wordslist = jieba.cut(raw, cut_all=False) # 精确模式
# 停用词处理
cutwordlist=''
for word in wordslist:
if word not in stopwords and word=="\n":
cutwordlist+="\n" # 保持原有文本换行格式
elif len(word)>1 :
cutwordlist+=word+"/" #去除空格
#保存清洗后的数据
with open(os.path.join(save_folder_path,file),'w',encoding='utf-8') as f:
f.write(cutwordlist)
j += 1 '''
结巴分词工具进行中文分词处理:
read_folder_path:待处理的原始语料根路径
write_folder_path 中文分词经数据清洗后的语料
'''
def HanLPSeg(read_folder_path,write_folder_path):
startJVM(getDefaultJVMPath(), "-Djava.class.path=C:\hanlp\hanlp-1.3.2.jar;C:\hanlp", "-Xms1g", "-Xmx1g") # 启动JVM,Linux需替换分号;为冒号:
stopwords ={}.fromkeys([line.strip() for line in open('../Database/stopwords/CH_stopWords.txt','r',encoding='utf-8')]) # 停用词表
# 获取待处理根目录下的所有类别
folder_list = os.listdir(read_folder_path)
# 类间循环
# print(folder_list)
for folder in folder_list:
#某类下的路径
new_folder_path = os.path.join(read_folder_path, folder)
# 创建一致的保存文件路径
mkdir(write_folder_path+folder)
#某类下的保存路径
save_folder_path = os.path.join(write_folder_path, folder)
#某类下的全部文件集
# 类内循环
files = os.listdir(new_folder_path)
j = 1
for file in files:
if j > len(files):
break
# 读取原始语料
raw = open(os.path.join(new_folder_path, file),'r',encoding='utf-8').read()
# HanLP分词
HanLP = JClass('com.hankcs.hanlp.HanLP')
wordslist = HanLP.segment(raw)
#保存清洗后的数据
wordslist1=str(wordslist).split(",")
# print(wordslist1[1:len(wordslist1)-1]) flagresult=""
# 去除标签
for v in wordslist1[1:len(wordslist1)-1]:
if "/" in v:
slope=v.index("/")
letter=v[1:slope]
if len(letter)>0 and '\n\u3000\u3000' in letter:
flagresult+="\n"
else:flagresult+=letter +"/" #去除空格
# print(flagresult)
with open(os.path.join(save_folder_path,file),'w',encoding='utf-8') as f:
f.write(flagresult.replace(' /',''))
j += 1
shutdownJVM() if __name__ == '__main__' :
print('开始进行文本分词操作:\n')
t1 = time.time() dealpath="../Database/SogouC/FileTest/"
savepath="../Database/SogouCCut/FileTest/" # 待分词的语料类别集根目录
read_folder_path = '../Database/SogouC/FileNews/'
write_folder_path = '../Database/SogouCCut/' #jieba中文分词
CHSegment(read_folder_path,write_folder_path) #300个txtq其中结巴分词使用3.31秒
HanLPSeg(read_folder_path,write_folder_path) #300个txt其中hanlp分词使用1.83秒 t2 = time.time()
print('完成中文文本切分: '+str(t2-t1)+"秒。")

运行效果:

结巴分词和自然语言处理HanLP处理手记的更多相关文章

  1. Python中结巴分词使用手记

    手记实用系列文章: 1 结巴分词和自然语言处理HanLP处理手记 2 Python中文语料批量预处理手记 3 自然语言处理手记 4 Python中调用自然语言处理工具HanLP手记 5 Python中 ...

  2. python 结巴分词学习

    结巴分词(自然语言处理之中文分词器) jieba分词算法使用了基于前缀词典实现高效的词图扫描,生成句子中汉字所有可能生成词情况所构成的有向无环图(DAG), 再采用了动态规划查找最大概率路径,找出基于 ...

  3. 结巴分词3--基于汉字成词能力的HMM模型识别未登录词

    作者:zhbzz2007 出处:http://www.cnblogs.com/zhbzz2007 欢迎转载,也请保留这段声明.谢谢! 1 算法简介 在 结巴分词2--基于前缀词典及动态规划实现分词 博 ...

  4. 中文分词之结巴分词~~~附使用场景+demo(net)

    常用技能(更新ing):http://www.cnblogs.com/dunitian/p/4822808.html#skill 技能总纲(更新ing):http://www.cnblogs.com/ ...

  5. python中文分词:结巴分词

    中文分词是中文文本处理的一个基础性工作,结巴分词利用进行中文分词.其基本实现原理有三点: 基于Trie树结构实现高效的词图扫描,生成句子中汉字所有可能成词情况所构成的有向无环图(DAG) 采用了动态规 ...

  6. Python 结巴分词(1)分词

    利用结巴分词来进行词频的统计,并输出到文件中. 结巴分词github地址:结巴分词 结巴分词的特点: 支持三种分词模式: 精确模式,试图将句子最精确地切开,适合文本分析: 全模式,把句子中所有的可以成 ...

  7. Python 结巴分词模块

    原文链接:http://www.gowhich.com/blog/147?utm_source=tuicool&utm_medium=referral PS:结巴分词支持Python3 源码下 ...

  8. solr+jieba结巴分词

    为什么选择结巴分词 分词效率高 词料库构建时使用的是jieba (python) 结巴分词Java版本 下载 git clone https://github.com/huaban/jieba-ana ...

  9. 北大开源全新中文分词工具包:准确率远超THULAC、结巴分词

    最近,北大开源了一个中文分词工具包,它在多个分词数据集上都有非常高的分词准确率.其中广泛使用的结巴分词误差率高达 18.55% 和 20.42,而北大的 pkuseg 只有 3.25% 与 4.32% ...

随机推荐

  1. javah命令的使用

    背景 java开发中如果使用到JNI,则难免需要使用javah来生成C++或C的头文件信息,下面小编就直接说说javah的命令: 第一种:直接cd到当前程序的target/class目录下(maven ...

  2. 《Android进阶之光》--Material Design

    接上篇<Android进阶之光>--Android新特性 No1: 组件: 1)底部工作条-Bottom Sheets 2)卡片-Cards 3)提示框-Dialogs 4)菜单-Menu ...

  3. 计蒜客 淘宝的推荐系统【DP】

    题目链接:https://nanti.jisuanke.com/t/26984                                                             ...

  4. [洛谷P2258][NOIP2014PJ]子矩阵(dfs)(dp)

    NOIP 2014普及组 T4(话说一道PJ组的题就把我卡了一个多小时诶) 这道题在我看第一次的时候是没有意识到这是一道DP题的,然后就摁着DFS敲了好长时间,结果敲了一个TLE 这是DP!!! 下面 ...

  5. #1075 : 开锁魔法III

    描述 一日,崔克茜来到小马镇表演魔法. 其中有一个节目是开锁咒:舞台上有 n 个盒子,每个盒子中有一把钥匙,对于每个盒子而言有且仅有一把钥匙能打开它.初始时,崔克茜将会随机地选择 k 个盒子用魔法将它 ...

  6. 20172302 《Java软件结构与数据结构》第四周学习总结

    2018年学习总结博客总目录:第一周 第二周 第三周 第四周 教材学习内容总结 第六章 列表 1.列表是对象的有序集合,在 List 界面中定义. List 接口表示集合框架中的列表.列表可以具有重复 ...

  7. git 快照及分支

    分支介绍 分支就是科幻电影里面的平行宇宙,当你正在电脑前努力学习Git的时候,另一个你正在另一个平行宇宙里努力学习SVN. 如果两个平行宇宙互不干扰,那对现在的你也没啥影响.不过,在某个时间点,两个平 ...

  8. php boolean

    要明确地将一个值转换成 boolean,用 (bool) 或者 (boolean) 来强制转换 var_dump((); // true 当转换为 boolean 时,以下值被认为是 FALSE: 1 ...

  9. Math类操作数据

    Math 类位于 java.lang 包中,包含用于执行基本数学运算的方法, Math 类的所有方法都是静态方法,所以使用该类中的方法时,可以直接使用类名.方法名,如: Math.round(); 常 ...

  10. 用ndk-stack分析应用native程序异常crash掉

    adb logcat | "/home/hxl/bin/android-ndk-r10d/ndk-stack" -sym "/home/hxl/plu/BadGame/p ...