1. 程式人生 > >java 將英文文章 按句子,標點符號分割,正則表示式

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();
		}
	}
}

相關推薦

java 英文文章 句子標點符號分割表示式

package com.gao; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException

只能輸入英文數字和下劃線和橫線的表示式

var reg="^[A-Za-z0-9-_]+$"  ; var regus = new RegExp(regs); regus.test("所要驗證的字串")  true 符合 false 不符合     中英文

CCF URL對映 java 100分詳解 :巧妙地動態構造表示式

 主要想法:將<int>替換成([0-9]+),將<str>替換成([^/]+),將<path>替換成(.+), 例如,/articles/<int>/<int>/<str>/ 替換之後就會變成/art

自定義控制元件-----自定義數字鍵盤適配了表示式的帶輸出字串的控制元件

一、主要的類:CustomAmountInputKeyboard class CustomAmountInputKeyboard constructor(context: Context, attrs: AttributeSet? = null) : LinearLayout(context,

Java學習筆記之Pattern類的用法詳解 (表示式)

Implements: Serializable 正則表示式的編譯表示形式。 指定為字串的正則表示式必須首先被編譯為此類的例項。然後,可將得到的模式用於建立 Matcher 物件,依照正則表示式,該物件可以與任意字元序列匹配。執行匹配所涉及的所有狀態都駐留在匹配器中,

js一些常用的校驗(工作中用的較多的並附常用表示式

做web的經常會遇到一些js校驗,比如身份證呀,手機號呀,郵箱呀等等,分享下我工作中遇到的這些,整理了下 /* * 校驗是否為空(null/空串) */ var checkNull = function(str){ if(str == null || str ==

Java表示式過濾、替換一段文字中的英語單詞分別提取出並統計詞頻詞頻排序。

最近在學習自然語言處理,在建立基礎標籤庫時,遇到一個需要提取語料中的英文單詞的工作,做好了現在來和大家分享下。 實現效果:讀取檔案內容,把其中的英文單詞提取出,並統計詞頻。提取時,原本不是連在一起的單詞可以分開獨立提取,例如:我的PPT和WORD,可以提取出PPT,WORD兩個單詞。 基本思

javaJSON字串轉換為實體類物件基於net sf json實現

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

java 學生列表資訊按照成績進行排序並建立新的檔案儲存

1 張三1 18 男 88 1385551 2 張三 18 女 99 1385552 3 張三 18 男 88 1385553 4 李四1 19 男 66 1385554 5 李四 20 女 88 1385555 6 李四 19 男 66 1385556 7 王五 20 女

Javalist資料取出並加入分隔符拼接轉換成String

方法一: public String listToString(List list, char separator) { StringBuilder sb = new StringBuilder(); for (int i = 0; i < list.size(); i++

一種英文文章字串每個單詞首字母轉成大寫字母的方法

import java.util.Arrays; public class newexercise3 {public static void main(String[] args) {String str =new String("If you were a teardro

JavaMap物件字典序排列,並且封裝成URL的工具類

/**      *      * 方法用途: 對所有傳入引數按照欄位名的 ASCII 碼從小到大排序(字典序),並且生成url引數串<br>      * 實現步驟: <br>      *      * @param paraMap   要排

表示式(模式器匹配器)及java中的日期表示

正則表示式 正則表示式:用於匹配某些特定字串的一個規則。 沒有學會使用正則表示式的時候,我們遇到過這麼一個需求-----校驗使用者名稱是否合法? 具體要求如下: 1)使用者名稱長度必須在6到15之間 2)必須是字母數字組合 非正則具體實現如下 public clas

迴文判斷程式碼(可以忽略字串中的空格標點符號舉個例子啊abcddcba就是一個迴文。a b cd,dc ba也是一個迴文。

#include<stdio.h> #include<string.h> #define N 100 int main() { char a[N]; char b[N]; int len; int j = 0; 

Python 用表示式一次替換文章中所有特殊符號如“-,$()#+&*”之類

一個簡單的正則表示式,可能會起大作用。比如說字符集就是這樣。一篇文章如果有各種亂碼,就可以用這種方法去除。如去除“-,$()#+&*”之類符號是很方便的。按照查詢、分割、替換的套路再做一做這樣的練習。今天晚了,後續還要操作檔案來完善這一點。 import re

Java清除標點符號表示式

                轉載請註明:http://www.pmjava.com/?thread-62961-1.html[java] view plain copy print?package com.test;    publicclass StringTest {         publicst

java驗證”支援6-20個字母、數字、下劃線或減號以字母開頭“這個的表示式怎麼寫?

轉自:https://yq.aliyun.com/wenzhang/show_96854 問題描述 java驗證,”支援6-20個字母、數字、下劃線或減號,以字母開頭“這個的正則表示式怎麼寫? 驗證”支援6-20個字母、數字、下劃線或減號,以字母開頭“的正則表示式

【傑瑞的專欄】架構師、指令碼語言專家;精通Python、Shell、表示式;熟悉Java、C、Tcl、Ruby、Scala、Perl等多種程式語言;在效能開源自動化測試方面有非常豐富的經驗

傑瑞的專欄 架構師、指令碼語言專家;精通Python、Shell、正則表示式;熟悉Java、C、Tcl、Ruby、Scala、Perl等多種程式語言;在效能,開源,自動化測試方面有非常豐富的經驗...

Java 表單註冊常用表示式驗證工具類常用表示式大集合。 1. 電話號碼 2. 郵編 3. QQ 4. E-mail 5. 手機號碼 ……

/* Java 表單註冊常用正則表示式驗證工具類,常用正則表示式大集合。 1. 電話號碼  2. 郵編  3. QQ  4. E-mail  5. 手機號碼  6. URL  7. 是否為數字  8. 是否為中文  9. 身份證  10. 域名  11. IP*/ pack

java使用replaceAll的表示式替換非常好用

package com.blog.test; import java.util.regex.Matcher; import java.util.regex.Pattern; public class TEst { public static void main(St