2013-05-09 1 views
1

텍스트 파일에서 2 단어를 포함하는 문장을 추출하려고합니다. 나는 아래 코드와 같이 정규 표현식을 사용했다. 텍스트는자바의 텍스트 파일에서 2 단어를 포함하는 문장을 추출

File doc = new File("D:\\MyFile.txt"); 

BufferedReader br = null; 

System.out.println("enter the regex pattern to be matched"); 
Scanner keyboard = new Scanner(System.in); 
String regxpat = keyboard.nextLine(); 


    String line; 
    br = new BufferedReader(new FileReader(doc));  
    Pattern p = Pattern.compile(regxpat, CASE_INSENSITIVE); 



    while ((line = br.readLine()) != null) 
    { 

    try 
    { 
     Matcher m = p.matcher(line); 
     m.find(); 

     System.out.print(m.group().toString()); 

    }   
    catch (IllegalStateException e) 
    { 
    } 
    continue; 

    } 
//i tried regex= "(he)*([.&&[^\.]]*?)Milan(.*?)\." 

경우 :

"...Thomas Edison is a scientist. He invented bulb. He was born in Milan, Ohio, and grew up in Port Huron, Michigan. He was the seventh and last child of Samuel Ogden Edison, Jr...." 
  • 은 내가 3 sentnce 즉 단어 'he'and'milan'(와 (문장 경계 공백 마침표이다) 문장을 원한다 순서는 중요하지 않습니다. 두 단어로 된 모든 문장이 필요합니다.)
  • 나는 위의 정규 표현식과 많은 다른 단어를 시도했으나
  • 문장을 '밀란'또는 2 문장의 첫 번째 ' 관계 패턴 "의 탄생이 경우 : 그는 '
  • 이 작업은 정규식 또는

(나는 2 엔티티 사이의 관계 패턴을 추출하는 작업입니다 자바의 다른 방법을 사용하여 수행 얻을 수있는 방법을 제안 해주십시오 "b/w 실체"edison "과"milan ". 내가

답변

0

제 제안은 정규 표현식이 모든 처리를 수행하고 한 번에 한 단계 씩 텍스트를 처리 할 것을 기대하지 않는 것입니다.

나는 문장을 원한다. (문장의 경계는 공백 다음에 끝난다.).

좋아요. 문자열 분리 방법을 사용하여 문장을 가져옵니다. 전체 정지 (마침표) 다음에 하나 이상의 공백이 정규 표현식으로 사용됩니다. 나는이 정규 표현식의 구성을 여러분에게 맡길 것입니다. 단어 '그'와 '밀라노'

벌금

. 단어를 입력하고 목록 < 문자열>에 추가하는 방법을 작성하십시오.

다른 분할 방법으로 만든 문자열 배열을 통해 다른 문장으로 나누는 다른 방법을 작성하십시오. 다시 말하지만,이 정규 표현식의 작성은 여러분에게 맡깁니다.

첫 번째 단어가있는 문장을 찾으려면 목록 단어를 반복하면서 목록의 단어가 단어 경계에서 문장 분할에 있는지 확인하십시오. 모든 단어를 찾으면 일치하는 문장을 찾았습니다. 모든 단어를 찾지 못하면 다음 문장을 계속하십시오.

문장의 분할 문자열 배열을 반복하면 문장 하나 이상, 문장 한 개 또는 단어 목록이 포함 된 문장이 없습니다.

+0

나는 시험해 보겠습니다. – user2359384

+0

문자열 분할 방법을 사용해 보았습니다. 그러나 여기에 정규 표현식 패턴과 관련된 문제가 있습니다. – user2359384

+0

'파일 문서 = 새로운 파일 ("D : \\ aMyFile.txt");의 BufferedReader BR = NULL;' '문자열 라인;' 'BR = 새의 BufferedReader (새을 FileReader (문서));' ' while (line = br.readLine())! = null) { for (문자열 retval : line.split ("\. \ s")) System.out.println (retval); } ' – user2359384

0

명확히하십시오) 학습과 처리를 수행하기 위 [ "에디슨 밀라노"에 대한 구글에서 에디슨의 전기 또는 처음 500 개 링크와 같은] 텍스트 파일 또는 웹 문서 수많은 관련에서 같은 문장이 필요합니다

  • 귀하의 코퍼스는 일관성이 있습니까 : 모두 "전기"는 구문과 같은 방식으로 포맷 되었습니까?
  • 그렇다면 일치하는 패턴이 무엇이 필요한가요, 아니면 일치하는 항목에서 무엇을 검색해야합니까? 예를 들어, "Edison"및 "Milan"과 키 값 쌍이 필요합니까? 또는...?

귀하의 코퍼스가 이 아니고이 아닌 경우 정규식을 사용하지 않는 것이 좋습니다. 그런 경우 사전 등을 사용하는 것이 좋습니다. 사전 작업이 어려울 수 있습니다.

+0

+ 예를 들어 일치하지 않습니다. 내 작업 2 추출 관계 패턴 B/W 엔티티. + 예 : Edison n milan의 경우, 출생지/출생지 등에서 태어날 수 있습니다. + 아니요에서 2 단어로 문장을 추출합니다. 관련 문서의 경우 이러한 패턴이 자주 나타나기 때문에 일종의 주파수 필터를 사용하여 이러한 패턴을 추출합니다. + 그 다음 사전을 사용하기로되어있다. .. 예. + 지금 나는 2 개의 주어진 단어로 문장이 필요하다. – user2359384

+0

나는 본다. 그래서, "나는 2 개의 주어진 단어로 문장이 필요하다"는 말은, 문장 1에 이름이 들어 있는지 확인하고, 문장 2에 "태어났다"라는 표현이 있는지 확인하고, 그렇다면 이름과 위치를 추출한다. 두 문장의 후보 단어. 내가 너를 올바르게 해석하고 있니? – Mena

+0

'edison'과 'milan'이라는 단어가 모두 포함 된 문장을 원합니다. 일치하는 항목이 없으면 'he'와 'milan'으로 문장을 검색합니다. 그럴 수 없다. 관련 텍스트 문서의 경우에는 "출생지/출생지 등 출생지 등"과 같은 관계 패턴이 분명히 포함되어 있습니다. – user2359384

관련 문제