Java将文章(中英文)划分为指定范围的小单元(保留句子完整性)
2012-08-16 14:57
746 查看
package haojie.tool; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStreamReader; import java.nio.charset.Charset; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; public class TestMain { private static final int MIN_THRESHOLD = 50; private static final int MAX_THRESHOLD = 80; private static List<String> list = new ArrayList<String>(); /** * @param args */ public static void main(String[] args) { String str = null; try { InputStreamReader isr = new InputStreamReader(new FileInputStream(new File("C:\\test.txt")),Charset.defaultCharset()); BufferedReader br = new BufferedReader(isr); StringBuffer sb = new StringBuffer(MAX_THRESHOLD); while ((str=br.readLine())!=null) { //String [] substrs = str.split("。|\\?|\\!|\\?|\\.|!"); /*正则表达式:句子结束符*/ String regEx="[。?!?.!]"; Pattern p =Pattern.compile(regEx); Matcher m = p.matcher(str); /*按照句子结束符分割句子*/ String[] substrs = p.split(str); /*将句子结束符连接到相应的句子后*/ if(substrs.length > 0) { int count = 0; while(count < substrs.length) { if(m.find()) { substrs[count] += m.group(); } count++; } } // String [] substrs = str.split("[。?!?.!]"); for (int i=0;i<substrs.length;i++) { if (substrs[i].length()<MIN_THRESHOLD) { //语句小于要求的分割粒度 sb.append(substrs[i]); //sb.append("||"); if (sb.length()>MIN_THRESHOLD) { //System.out.println("A New TU: " + sb.toString()); list.add(sb.toString()); sb.delete(0, sb.length()); } } else { //语句满足要求的分割粒度 if(sb.length()!=0) //此时如果缓存有内容则应该先将缓存存入再存substrs[i]的内容 以保证原文顺序 { list.add(sb.toString()); //System.out.println("A New Tu:"+sb.toString()); sb.delete(0, sb.length()); } list.add(substrs[i]); //System.out.println("A New Tu:"+substrs[i]); } } } br.close(); isr.close(); //将分割好的tu放入List中以便传入数据库 for (Iterator i = list.iterator(); i.hasNext();){ System.out.println(i.next()); } } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }
相关文章推荐
- Java将文章(中英文)划分为指定范围的小单元(保留句子完整性)
- Java对小数保留指定位数方法
- java生成指定范围的随机数
- Java使用BigDecimal保留double、float运算精度、保留指定位数有效数字、四舍五入
- JAVA得到一个指定日期范围内每天的开始时间和结束时间
- 生成指定范围内无重复的随机乱序数组(JAVA实现/时间复杂度为O(n))
- java生成指定范围的随机数
- java 随机数 【指定范围】
- Java指定保留小数位数的方法
- java随机抽取指定范围不重复的数字
- Java+统计文件文章中单词的数量,去除指定特殊符号
- java生成指定范围的随机数
- Java使用BigDecimal保留double、float运算精度、保留指定位数有效数字、四舍五入
- java格式化字符串,在指定位置插入指定字符串,兼容中英文以及特殊字符,例如:换行,用于解决生成pdf换行问题等问题
- java 生成指定范围的随机日期
- java 产生指定范围的随机数
- java生成指定范围的随机数
- java中如何计算百分比之后保留指定…
- Java中double保留指定位数的两种方法