JAVA实现一把逆向最大匹配
2013-09-26 11:01
393 查看
逆向最大匹配,顾名思义,根据你的字典词的最大长度,设置一个你接受文字的容器,然后在容器里每次把第一字去除。举个简单的例子,比如,“我是中国人,来自中国人民解放军”,我的字典中最大词如果也是15,那么我先匹配“我是中国人,来自中国人民解放军”是否在字典中,没有把“我”去掉,然后匹配“是中国人,来自中国人民解放军”也没有,以此类推,最后匹配到“中国人民解放军”。
先定义一个用来匹配数据的队列
定义一个对文件读取,以及是否存在于文件中
最后是主函数
先定义一个用来匹配数据的队列
public class Queue { private String str=""; private String strOut = ""; private int iStartPos = 0; private int iMaxNumber; public void put(char c){ str += c; } public boolean pop(){ iStartPos++; if(iStartPos == str.length()){ iStartPos--; return false; } strOut=str.substring(iStartPos,str.length()); return true; } public String getStr() { return str; } public void setStr(String str) { iMaxNumber = str.length(); strOut = str; this.str = str; } public String getOutStr(){ return strOut; } public int getStratPos(){ return iStartPos; } // public void setiMaxNum(int iNum){ // this.iMaxNumber = iNum; // } }
定义一个对文件读取,以及是否存在于文件中
import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; //import java.io.FileReader; import java.io.IOException; import java.io.InputStream; //import java.io.InputStreamReader; //import java.io.RandomAccessFile; import java.io.Reader; public class ReadFromFile { private String str; public String readFile(String fileName) { //String str = ""; File file = new File(fileName); this.str = ""; try { FileInputStream fis = new FileInputStream(fileName); int length; //String str = ""; byte by[] = new byte[1024]; while((length = fis.read(by)) != -1) { String strTemp = new String(by,0,length); this.str = this.str + strTemp; } fis.close(); } catch(Exception e) { e.printStackTrace(); } return this.str; } public boolean matched(String strWords){ if(this.str.contains("\r\n"+strWords +"\r\n")){ return true; } else return false; } }
最后是主函数
import java.util.ArrayList; public class UseReverse { public static void main(String[] args) { int iMaxSize = 1; int iBegPos = 0; String strSep = ""; //int iWordMaxSize = 0; //String strInput; ArrayList aSepWord = new ArrayList(); ReadFromFile rf = new ReadFromFile(); String str=rf.readFile("F:\\微博相关\\字典\\123.TXT"); //str=str.replaceAll("\\r\\n", "##"); str="\r\n"+str; //System.out.println(str); ReadFromFile rf1 = new ReadFromFile(); String strNeedSep = rf1.readFile("F:\\test.txt"); System.out.println(strNeedSep); iMaxSize = strNeedSep.length(); //iBegPos = iMaxSize - 15; while(iMaxSize != 0){ iBegPos = iMaxSize - 15; if(iBegPos < 0){ strSep = strNeedSep.substring(0,iMaxSize); iBegPos = 0; } else{ strSep = strNeedSep.substring(iBegPos, iMaxSize); } Queue qStr = new Queue(); qStr.setStr(strSep); while(!rf.matched(qStr.getOutStr())){ if(!qStr.pop()){ break; } } System.out.println(qStr.getOutStr()); aSepWord.add(qStr.getOutStr()); //最后是一个词 iMaxSize = iBegPos + qStr.getStratPos(); } } }
相关文章推荐
- 中文分词引擎 java 实现 — 正向最大、逆向最大、双向最大匹配法
- Java实现正向最大匹配法和逆向最大匹配法
- Java实现的最大匹配分词算法详解
- java实现正向最大匹配分词
- 简单的逆向最大匹配算法实现中文分词(Python)
- python实现机械分词之逆向最大匹配算法代码示例
- 自己写中文分词器之(一)_逆向最大匹配算法的实现
- 二分图相关概念及匈牙利算法求解最大匹配(附代码实现)
- java实现最大字段和的动态规划解法
- 实现O(1)获取最大最小值的栈----java
- 最大子数组和算法(Java实现)
- java实现无序整数数组组合得出最大数,如array={1,2,3},array2={123,132,213,231,312,321}。最大数是321
- Java 用正则表达式来实现 通配符匹配 (支持*, ?)
- java实现括号匹配
- java 三种方法实现最大公约数
- Java堆栈的应用1----------堆栈的自定义实现以及括号匹配算法的Java实现
- java实现串的匹配和替换
- Java实现算法导论中最大公约数欧几里得算法
- java版 利用栈实现括号匹配
- 数据结构与算法分析笔记与总结(java实现)--二叉树10:最大二叉搜索子树练习题