Java中文文本预处理:Jieba分词,并去除停用词

3 篇文章 1 订阅

Java中文文本预处理:Jieba分词,并去除停用词

简介

文本数据是自然语言处理的重要数据来源,对于中文文本而言,由于其特殊性,常常需要对文本进行分词,例如“今天的天气真的非常好!”这句话,需要被拆分为“今天,的 ,天气 ,真的 ,非常 ,好”六个词。但原始文本数据中常常会包含大量的噪声信息,例如中文文本中的“的”、“了”、“是”等一些词语以及标点符号会反复出现,这类词对于文本数据挖掘而言并不会提供有用信息,而是作为噪声存在干扰其他词,上面的例子实际有用的仅为:”今天, 天气,好“三个词。本文针对中文文本,利用Java对其进行分词,并去除停用词。

准备工作

首先,本文处理过程用到的工具包为HFTUUtils,此工具包是一个工具程序集合,包括分词(集成了张华平分词、结巴分词)、文件处理增强(如读取文本到Map中,保存文本到Map)和语料模型(把文档转换成矩阵,就算单词数量等),可以用于文本数据预处理,GitHub下载地址为HFTUUtils
其次,需要准备停用词,中文停用词网上有很多,可以自行下载,这里提供一个版本:
停用词,提取码: h8xn,可以根据自己的文本数据特征对停用词进行删减。

中文分词、去停用词的Java实现

以上准备工作做好后,对于如下未经处理的中文文本数据,需要对其进行分词、去停用词。

利用Java的具体处理过程如下:

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.util.List;
import org.apache.commons.io.FileUtils;
import org.hfutec.preprocess.wordseg.Jieba;
public class textSplit {
	public static void main(String[] args) {
		File input = new File("data"+File.separator+"test.txt");         //待处理的中文文本数据
		File output = new File("result"+File.separator+"testSplit.txt"); //分词、去停用词后的文本数据		
		try {
	        File file1 = new File("data/stopWords.txt"); 
	        List<String> stopword= FileUtils.readLines(file1,"utf8");  //加载停用词,存储在List集合中
	        BufferedReader bufr = new BufferedReader(new InputStreamReader(new FileInputStream(input),"UTF-8"));
			BufferedWriter bufw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(output),"UTF-8"));
			String line;
			Jieba jieba = new Jieba();
			int i = 0;
			while((line = bufr.readLine())!=null){   //循环每一行文本进行处理
				List<String> outList = new ArrayList<String>();
				List<String> input_text_list = new ArrayList<>();
				input_text_list.add(line);
				String[] outStrings = jieba.seg(input_text_list).get(0).split("\\s+"); //将每行文本用结巴进行分词,并返回分词后的String数组
				for(String word:outStrings)   //将String数组转成List集合
					outList.add(word);
				outList.removeAll(stopword); //去除停用词
				String seg = String.join(" ", outList); //将List集合转为字符串,中间用空格隔开
				bufw.append(seg);
				bufw.newLine();
				bufw.flush();
				System.out.println(i++);
			}
			bufw.flush();
			bufw.close();
			bufr.close();			
		} catch (IOException e) {
			e.printStackTrace();
		}		
	}
}

完后分词并且去除停用词后的文本数据如下:

原本连在一起并且充斥着无用信息的文本数据已经被分好词,并去除了停用词,为后期进行NLP提供了便利。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值