2014-02-09 4 views
0

스탠포드 파서를 사용하여 특정 단어가 포함 된 명사구를 추출하려면 어떻게해야합니까? 나는이 게시물에 작성된 코드를 사용하여 명사구 추출 할 수 있습니다 : 그러나스탠포드 파서를 사용하여 특정 단어가 포함 된 명사구를 추출합니다.

https://stackoverflow.com/questions/21652202/get-noun-phrase-of-subject-in-sentence-stanford-parser

을, 나는 그러나 이것은 문자열 검색하기 때문에 일을하는 것만 큼 간단하지 않다, 특정 단어가 들어있는 명사구를 얻을 필요 그 단어는 문장에서 두 번 나타날 수 있습니다. 그래서 문장의 특정 순서로 특정 단어를 포함하는 명사구를 추출해야합니다.

String some_sentence = "The dog ran after the intruding bigger dog"; 

개를 두 번 표시, 문장에서 두 번째 단어로 처음으로, 그리고 문장의 마지막 단어로 두 번째 : 그래서 문장이 있다고 가정합니다. 개가 처음 나오는 명사구는 어떻게 추출 할 수 있습니까?

+0

당신이 연결 문제는 액세스 할 수 없습니다 – scozy

답변

0

가장 쉬운 방법이 아니라면, 구문 분석을 괄호로 묶은 문자열로 수집하고, 정규식을 통해 명사구를 복구 한 다음 각 단어를 검사하여 단어가 들어 있는지 확인할 수 있습니다.

이 그런 종류의 무언가를 줄 것이다 :

String parse = "(ROOT (S (NP (DT The) (NN dog)) (VP (VBD ran) (PP (IN after) (NP (DT the) (JJ intruding) (JJR bigger) (NN dog))))))"; 
String target = "dog"; 
String result = null; 
String regex = "\\(NP \\s (?: \\(.+? \\))* \\)"; // an NP contains an arbitrary number of sub-phrases 
Pattern patt = Pattern.compile(regex, Pattern.COMMENTS); 
Matcher match = patt.matcher(parse); 
while(match.find() && result == null) { 
    if (match.group().contains(target)) { 
     result = match.group(); 
    } 
} 
if (result != null) { 
    System.out.println(result); 
} 
관련 문제