java 将英文文章 按句子,标点符号分割,正则表达式

package com.gao;
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("D:\\Users\\gao\\Desktop\\1.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();
		}
	}
}

时间: 2024-08-16 00:04:33

java 将英文文章 按句子,标点符号分割,正则表达式的相关文章

英文文章

对任意一篇英文文章,统计其中每个单词分别出现了多少次,并可替换指定的单词.[功能要求](1)英文文章以文件形式输入.(2)统计结果保存为文件.(3)对单词进行替换时,允许用户选择全部替换,或逐个替换.替换完成后,将文章存盘. 1 #include<stdlib.h> 2 #include<stdio.h> 3 #include<vector> 4 #include<fstream> 5 #include<string> 6 using names

统计英文文章单词数相关内容

问题描述: 统计英文文单词数,具体要求:对于给定的一片英文文章,统计单词的个数.关键词的个数.空格的个数 标点符号的个数,同时还能将原来的关键词替换成新的词语 1 #include<iostream> 2 #include<vector> 3 #include<fstream> 4 #include<string> 5 using namespace std; 6 7 //关键词 8 #define keyword 11 9 string k[keyword

js查找一篇英文文章中出现频率最高的单词

下面这个函数是js查找一篇英文文章中出现频率最高的单词(由26个英文字母大小写构成),输出该单词及出现次数,不区分大小写,主要是正则的运用: function counts(article){ article = article.trim().toUpperCase(); var array = article.match(/[A-z]+/g); article = " "+array.join(" ")+" "; var max = 0,wor

Java实现英语文章词频统计

1.需求:对于给定的英文文章进行单词频率的统计 2.分析: (1)建立一个如下图所示的数据库表word_frequency用来存放单词和其对应数量 (2)Scanner输入要查询的英文文章存入String中 (3)对String根据空格进行拆分存入word_frequency表中,并统计相应数量 (4)对word_frequency表中的数据按照频率由大到小,频率相同的情况下按照字母表顺序排序并输出 3.具体实现代码: 4.输入语句:You should help to set the dinn

统计一篇英文文章内每个单词出现频率,并返回出现频率最高的前10个单词及其出现次数

统计一篇英文文章内每个单词出现频率,并返回出现频率最高的前10个单词及其出现次数 from collections import Counter import re with open('a.txt', 'r', encoding='utf-8') as f: txt = f.read() c = Counter(re.split('\W+',txt)) #取出每个单词出现的个数 print(c) ret = c.most_common(10) #取出频率最高的前10个 print(ret) 原

java 字符串截取类 区分中文、英文、数字、标点符号

package com.founder.fix.ims; /** * @author WANGYUTAO * 操作字符串 */ public class SubString { // public static void main(String[] args) { // String str = "我爱阿斯顿发生大法师大法上帝发誓地方时代发生大法师大法金"; // String str1 = "sdfdssfsfdsf把dsdafdafafdsfadas"; //

java的英文词频算法

java实现的英文词频算法,通常是采用单词树来实现的.使用java实现词频统计,为了统计词汇出现频率,最简单的做法是再建立一个map,其中,key是单词,value代表次数.将文章从头读到尾,读到一个单词就到Map里查一下,如果查到了则次数加一,没查到则放到map中.这样虽然代码简单,但却达不到想要的效果,通过性能的测试看出性能却非常差.从时间复杂度来说map时间复杂度是0(logn),如果拿来高频词需要进行排序,即使在结构优化,但最后还是不能很大的性能提高.

推荐一篇关于java 学习的文章,感觉写的很不错

---恢复内容开始---    很多网友问我学习Java有没有什么捷径,我说"无他,唯手熟尔".但是我却很愿意将自己学习的一些经验写出来,以便后来者少走弯路,帮助别人是最大的快乐嘛!     要想学好Java,首先要知道Java的大致分类.我们知道,自从Sun推出Java以来,就力图使之无所不包,所以Java发展到现在,按应用来分主要分为三块:J2SE,J2ME和J2EE, 这也就是SunONE(OpenNetEnvironment)体系.J2SE就是Java2的标准版,主要用于桌面应

android开发之网络棋牌类在线游戏开发心得(服务器端、Java) 好文章值得收藏

标签: android服务器 2013-10-09 17:28 3618人阅读 评论(0) 收藏 举报 分类: android(11) 转自:http://blog.csdn.net/bromon/article/details/253330 Bromon原创 请尊重版权 一个多人在线的棋牌类网络游戏的项目临近尾声,我参与了该项目的整个设计流程,并且完成了90%的核心代码.关于这个项目,有很多地方值得聊一聊.本系列不打算把这个项目将得多么详细规范,那是设计文档应该描述的,我打算只说说一些值得注意