2014-09-24 4 views
2

내가 단어로 분할하고자하는 문장분할 텍스트

List<String> lookUp = new ArrayList<>(); 
lookUp.add("New York"); 
lookUp.add("Big Apple"); 

같은 일부 불가분 단어를 포함하는 목록을 가지고 있지만, 내 목록에 주어진 불가분 단어를 분할하지 않습니다. 그래서 예를 들어

String sentence = "New York is also called Big Apple"; 

은 나를

["New York", "is", "also", "called", "Big Apple"] 

을 반환해야 내가 먼저 공백으로 문장을 분할하는 알고리즘을 쓰기 시작하고 내가 루프를 수행합니다 모든 단어를 들어 내가이 단어 여부를 확인하고 lookUp-list에서 바로 이웃이 발생하고, 사실이라면이 단어들을 함께 분석하십시오.

1) 내 lookUp-list에도 "George W. Bush"와 같은 단어가 두 개 이상있는 구가 포함되어 있다고 가정 해 보겠습니다. 내 알고리즘은 "George W"만 조회합니다. 와 "부시 (Bush)"라고 부르며 검색 목록에서 찾을 수 없으므로 3 단어로 나눕니다.

2) 더 중요한 질문 (질문 1은 무시할 수 있음) : 이미 라이브러리 또는 GATE 플러그인이 있습니까 (바퀴를 다시 만들 필요가 없도록)? 그리고 이것은 또한 독일어 구문에도 존재합니까?

List<String> lookUp = new ArrayList<>(); 
    lookUp.add("New York"); 
    lookUp.add("New Jersey"); 
    lookUp.add("Big Apple"); 
    lookUp.add("George W. Bush"); 

    String sentence = "New York is also called Big Apple . New Jersey is located near to New York . George W. Bush doesn't live in New Mexico`"; 

    String currentPhrase = ""; 
    List<String> parseResult = new ArrayList<>(); 

    for (String word : sentence.split("\\s+")) { 
     currentPhrase += (currentPhrase.isEmpty() ? "" : " ") + word; 
     if (lookUp.contains(currentPhrase)) { 
      parseResult.add(currentPhrase); 
      currentPhrase = ""; 
      continue; 
     } 
     boolean phraseFound = false; 
     for (String look : lookUp) 
      if (look.startsWith(currentPhrase)) { 
       phraseFound = true; 
       break; 
      } 

     if (!phraseFound) { 
      parseResult.addAll(Arrays.asList(currentPhrase.split("\\s+"))); 
      currentPhrase = ""; 
     } 
    } 

    System.out.println(parseResult); 

출력은 다음과 같습니다 : 나는 Java 7 하나 = (

+0

그것은 너무 사소한 문제, 그래서 내가 믿는 :이 – Andremoniy

+1

당신이 "abc"를 얻었고 당신의 검색에서 "ab"와 "bc"를 가지고 있다면? – aioobe

+0

대체 방법 : 1) lookUp 항목에 의해 분할, 2) 3) 만약 그렇다면, 계속하십시오. 4) 그렇지 않다면, o를 쪼개십시오. n 공백. – jensgram

답변

0

또 다른 구현하는 regular expressions를 사용하지 않는 찾을 수 없습니다

[New York, is, also, called, Big Apple, ., New Jersey, is, located, near, to, New York, ., George W. Bush, doesn't, live, in, New, Mexico] 
+0

작동! 그리고 이제 상상해보십시오, 당신은 "George W"를 가지고 있습니다. 조지 W. 부시 (George W. Bush) : "George W", "부시 (Bush)"가 아닌 ...)에 파싱되어야합니다. 그러나 이것은 제 질문을 훨씬 뛰어 넘습니다. D – Munchkin

+0

I 그것으로 조금 연주. 내 조회 목록에 많은 항목이 포함되어 있으면 실패합니다. 구체적으로 말하자면, 구문 분석에 100 개 이상의 구문을 추가하면 단어에 대한 문장 단어가 나뉘어집니다 (예, 구문에 조회 구문이 포함되어 있습니다!) =/ – Munchkin

+1

내 마지막 의견을 잊어 버렸습니다. 내 실수 : P – Munchkin