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

本文涉及的产品
NLP自然语言处理_基础版,每接口每天50万次
NLP 自学习平台,3个模型定制额度 1个月
NLP自然语言处理_高级版,每接口累计50万次
简介:

阅读目录

手记实用系列文章:
代码封装类:
运行效果:
手记实用系列文章:
1 结巴分词和自然语言处理HanLP处理手记

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

3 自然语言处理手记

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

5 Python中结巴分词使用手记

代码封装类:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148

!/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)+"秒。")

运行效果:
image

文章来源于网络

相关文章
|
自然语言处理 算法 Java
NLP快速入门:手把手教你用HanLP做中文分词
NLP快速入门:手把手教你用HanLP做中文分词
1082 0
NLP快速入门:手把手教你用HanLP做中文分词
|
自然语言处理
自然语言处理hanlp------3java调用hanlp
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
自然语言处理hanlp------3java调用hanlp
|
自然语言处理
自然语言处理工具HanLP-基于层叠HMM地名识别
本篇接上一篇内容《HanLP-基于HMM-Viterbi的人名识别原理介绍》介绍一下层叠隐马的原理。首先说一下上一篇介绍的人名识别效果对比: 只有Jieba识别出的人名准确率极低,基本为地名或复杂地名组成部分或复杂机构名组成部分。
1262 0
|
自然语言处理 Python Java
自然语言处理工具python调用hanlp的方法步骤
Python调用hanlp的方法此前有分享过,本篇文章分享自“逍遥自在017”的博客,个别处有修改,阅读时请注意!1.首先安装jpype首先各种坑,jdk和python 版本位数必须一致,我用的是JPype1-py3 版本号0.5.5.2 、1.6jdk和Python3.5,win7 64位下亲测没问题。
1176 0
|
自然语言处理 Docker 容器
HanLP 自然语言处理 for nodejs
·支持中文分词(N-最短路分词、CRF分词、索引分词、用户自定义词典、词性标注),命名实体识别(中国人名、音译人名、日本人名、地名、实体机构名识别),关键词提取,自动摘要,短语提取,拼音转换,简繁转换,文本推荐,依存句法分析(MaxEnt依存句法分析、CRF依存句法分析)
1566 0
|
自然语言处理 Windows
Hanlp自然语言处理工具之词法分析器
本章是接前两篇《分词工具Hanlp基于感知机的中文分词框架》和《基于结构化感知机的词性标注与命名实体识别框架》的。本系统将同时进行中文分词、词性标注与命名实体识别3个任务的子系统称为“词法分析器”。
2515 0
|
缓存 自然语言处理
Hanlp自然语言处理中的词典格式说明
使用过hanlp的都知道hanlp中有许多词典,它们的格式都是非常相似的,形式都是文本文档,随时可以修改。本篇文章详细介绍了hanlp中的词典格式,以满足用户自定义的需要。
4852 0
|
自然语言处理 Java 开发工具
如何编译运行HanLP自然语言处理包
master分支 对于master分支,编译方法如下: git clone  https://github.com/hankcs/HanLP.git mvn install -DskipTests   ·由于目前一些test不够规范,使用了硬编码路径下的资源,所以暂时跳过单元测试。
1352 0
|
自然语言处理 算法 C++
开源自然语言处理工具包hanlp中CRF分词实现详解
 CRF简介 CRF是序列标注场景中常用的模型,比HMM能利用更多的特征,比MEMM更能抵抗标记偏置的问题。 [gerative-discriminative.png]  CRF训练 这类耗时的任务,还是交给了用C++实现的CRF++。
1897 0
|
自然语言处理 算法 程序员
自然语言处理工具hanlp关键词提取图解TextRank算法
TextRank是在Google的PageRank算法启发下,针对文本里的句子设计的权重算法,目标是自动摘要。它利用投票的原理,让每一个单词给它的邻居(术语称窗口)投赞成票,票的权重取决于自己的票数。这是一个“先有鸡还是先有蛋”的悖论,PageRank采用矩阵迭代收敛的方式解决了这个悖论。
1608 0