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
- Java中文分词(逆序查找输出)
- 中文分词源代码 - java
- java中文分词
- Java 中文分词器
- JAVA中文分词算法
- java中文分词实例
- NLPIR中文分词 java
- java中文分词算法
- java lucene中文分词
- 将数字序列逆序输出(java)
- 逆序输出递归算法(java版本)
- Java中文分词组件 - word分词
- Java中文分词组件 - word分词
- Java中文分词组件 - word分词
- 字符串逆序输出,冒泡,二分查找
- (修改)中文分词
- 逆序输出(指针)
- Java中文分词器Ansj
- 用java输出正方形,等腰三角形,直角三角形
- 关于Android 5.0 的新特性
- [从头学绘画] 第27节 基本姿式-趴势
- codeforces-368
- java Stack(栈)的用法
- Java中文分词(逆序查找输出)
- 大型高并发高负载网站的系
- C/C++ Windows API——Udp
- Genymotion镜像下载慢的解决办法
- 关于Android 6.0的新特性
- Java多态及静态方法对动态方法的调用
- WJ的逃离
- 【Linux 内核网络协议栈源码剖析】connect 函数剖析(一)
- HDU 2069 —— Coin Change