Java中文分词(逆序查找输出)

来源:互联网 发布:亚马逊大数据应用 编辑:程序博客网 时间:2024/05/22 13:47

要求

使用Java,输入中文语句,分解为词语并输出。

思路

将词库读入list数组,读入语句,分割语句,和字典的词进行比对,使用逆向检索的方法。(使用逆向的方法是因为逆向更符合中文语句的组词方式)

代码

第一部分读入词库

定义字符串ss,将字符串使用split方法来进行分割,split的使用方法:如果每个,分割一次,则表达式为split(","),如果语句之件为空格,则表达式为split(" ")

public static ArrayList<String> list = new ArrayList<String>();try {            File file = new File("F:\\dictionary.txt");            BufferedReader input = new BufferedReader(new FileReader(file));            String ss = new String();            while ((ss = input.readLine()) != null) {                String[] s = ss.split("  ");                //将字符串中的所有单词都添加到list里面                for(String t:s){                    list.add(t);                }            }            input.close();        } catch (Exception e) {            e.printStackTrace();            System.out.println("read fail");        }

第二部分分词

  • 分词的时候需要将一句话逐字逐词的与词库中的数据进行比较,如果存在就进行输出,如果不存在就在原基础上增加一个字重新进行匹配。
  • 如果一句话进行分析后没有任何匹配,就需要将这句话的最后一个字去掉重新循环进行匹配。

分词函数

class Split {    private String input=null;    public Split (String input) {        this.input = input;    }    public void start(){        String temp=null;        for(int i=0;i<this.input.length();i++){            temp=this.input.substring(i);//每次从字符串的首位截后面的内容,并保存在temp            if(this.isInDictionary(temp)){                System.out.println(temp);                this.input=this.input.replace(temp,"");                i=-1;//这块必须把i置为0            }        }        //如果第一次循环没有找到,则把最后的一个字截取,开始第二次循环        if(null != this.input && !"".equals(this.input)) {            this.input = this.input.substring(0,this.input.length()-1);            this.start();        }    }

判断字词是否在词库中

public boolean isInDictionary(String temp){        if(InsertString.list.contains(temp)){            return true;        }        return false;    }

完整代码

import java.io.BufferedReader;import java.io.File;import java.io.FileReader;import java.util.ArrayList;import java.util.Scanner;public class InsertString {    public static ArrayList<String> list = new ArrayList<String>();    public static void main(String[] args) {        try {            File file = new File("F:\\dictionary.txt");            BufferedReader input = new BufferedReader(new FileReader(file));            String ss = new String();            while ((ss = input.readLine()) != null) {                //读入的每行分成数组                String[] s = ss.split("  ");                //将数组中的所有单词都添加到list里面                for(String t:s){                    list.add(t);                }            }            input.close();        } catch (Exception e) {            e.printStackTrace();            System.out.println("read fail");        }        Scanner in= new Scanner(System.in);        System.out.println("请输入语句");        String input = in.next();// 要匹配的字符串        new Split(input).start();    }}class Split {    private String input=null;    public Split (String input) {        this.input = input;    }    public void start(){        String temp=null;        for(int i=0;i<this.input.length();i++){            temp=this.input.substring(i);//每次从字符串的首位截后面的内容,并保存在temp            if(this.isInDictionary(temp)){                System.out.println(temp);                this.input=this.input.replace(temp,"");                i=-1;            }        }        //如果第一次循环没有找到,则把最后的一个字截取,开始第二次循环        if(null != this.input && !"".equals(this.input)) {            this.input = this.input.substring(0,this.input.length()-1);            this.start();        }    }    //判断当前词是否在字典中    public boolean isInDictionary(String temp){        if(InsertString.list.contains(temp)){            return true;        }        return false;    }}
0 0
原创粉丝点击