名词过滤(正则表达式)

这篇博客探讨了在Java中如何利用Pattern类和正则表达式进行名词过滤。作者通过学习和实践,理解了如何设置多个分隔符来分割字符串,并提供了使用String.split()方法处理包含多种运算符的字符串的示例。代码示例展示了如何过滤掉非名词内容和标点符号,尽管不够精确,但能有效排除无关内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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);
      
    }

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值