名词过滤(正则表达式)

时间:2022-09-16 11:26:03

分词以及词性标注以后不知道词语拿来有什么用。因此就想了半天如何提取里面的名词。之前已经写过一篇《

Java学习笔记之Pattern类的用法详解(正则表达式)

从里面已经学到了很多的正则表达式,因此也对我后期的研究有了一些启发。另外,由于我想知道怎样让多个正则表达式一起起作用,于是我又看了一篇博客:《 

Java String.Split(String regex)方法之设置多个分隔符

点击打开链接

我们知道String变量有一个split方法,这个方法用于分割String字符串,返回值为一个String型的数组。 
例如:

String str = "hello,boy,what's your name?";
 
 
 
  • 1
  • 1

此时我们需要以逗号(,)为分隔符,将这句话切割开,则使用:

String[] array = str.split(",");
 
 
 
  • 1
  • 1

但是,有的时候遇到这种情况呢:

String str = "1+2-3+5-64*25+25/65";
 
 
 
  • 1
  • 1

我们需要以+、-、*、/为分隔符,切割这个字符串,去掉运算符,得到数字呢? 
当然,同样是有解决办法的,我们可以使用正则表达式来为split方法设置多个分隔符。 
例如:

String str = "1+2-3+5-64*25+25/65";
String[] array = str.split("\\+|-|\\*|/");
  • 1
  • 2
  • 1
  • 2

也就是使用|来连接我们的多个分隔符(\\为转义符,有的字符需要转义)。

原来多个正则表达式隔开的话用“|”就可以了

这是我的完整代码(可以过滤掉和名词不太想干的内容以及标点符号,虽然不太精确,但是足够过滤掉很多不相干的东西了)

package com.hankcs.demo;
import com.hankcs.hanlp.HanLP;
import com.hankcs.hanlp.tokenizer.NotionalTokenizer;

import java.io.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* Created by Administrator on 2017/6/21.
* /**
* 提取汉字(被注销掉的那个函数就是)
* 现在实现的功能是提取名词|
*
* @author ajax_2003
* @version 1.0, 2009-7-23
*
*/

public class DemoExtract2 {
public static void readTxtFile(String filePath){
try {
String encoding="utf-8";
File file=new File(filePath);
if(file.isFile() && file.exists()){ //判断文件是否存在
InputStreamReader read = new InputStreamReader(
new FileInputStream(file),encoding);//考虑到编码格式
BufferedReader bufferedReader = new BufferedReader(read);
String lineTxt = null;
// File f=new File("E:\\aaaaaaaaaaaaaaaaaaaaa\\data\\数据\\dataset_621479\\621479\\京东评论\\手机\\656206_out.txt");
File f=new File("E:\\aaaaaaaaaaaaaaaaaaaaa\\data\\data_ice2_mingci.txt");

f.createNewFile();
FileOutputStream fileOutputStream = new FileOutputStream(f);
PrintStream printStream = new PrintStream(fileOutputStream);
while((lineTxt = bufferedReader.readLine()) != null){
String result[] = lineTxt.split("\\W/m|\\W/q|\\Ww|\\W/v|\\W/u|\\W/d|\\W/c|\\W/r|\\W/b|\\W/p|\\W/a|、|,|。|\\W/f|\\p{Alnum}|\\p{Punct}");
for( int i=0;i<result.length;i++)
{
System.setOut(printStream);
System.out.print(result[i]);
}
System.setOut(printStream);
System.out.println();


// System.out.println(NotionalTokenizer.segment(lineTxt)); // 停用词典位于data/dictionary/stopwords.txt,可以自行修改
// 自动断句+去除停用词
// System.out.println(lineTxt);

}
read.close();
}else{
System.out.println("找不到指定的文件");
}
} catch (Exception e) {
System.out.println("读取文件内容出错");
e.printStackTrace();
}

}
public static void main(String[] args) {
HanLP.Config.ShowTermNature =false; // 关闭词性显示
String filePath = "E:\\aaaaaaaaaaaaaaaaaaaaa\\data\\data_ice2_fenci.txt";
readTxtFile(filePath);

}

}