2012-07-05 8 views
2

WordNet 및 MIT JWI (WordNet에 액세스하기위한 Java API)에 관한 아주 쉬운 질문이 있습니다. 파일을 단어로 분할 한 문자열 배열로 읽습니다. getPOS()을 사용하여 명사 만 포함 된 별도의 문자열 배열을 얻으려면 어떻게해야합니까? 감사! 나는 무엇을 시도했다의Java - Wordnet 및 JWI로 명사 배열 얻기

예 :

공용 클래스 테스트 {

public static void main(String[] args) { 

    String sentence1 = "The cat ate the fish"; 

    String[] s1Split = sentence1.split(" "); 

    String wnhome = "C:/Program Files/WordNet/2.1"; 
    String path = wnhome + File.separator + "dict"; 
    URL url = new URL("file", null , path); 
    IDictionary dict = new Dictionary(url); 
    dict.open(); 


    for (int i = 0; i <s1.length; i++) { 
        //this is where I got confused, wanted to use something like: 
        //Word w = dict.getIndexWord(s1[i], ..) but I need a POS argument, 
        //and I can't find another suitable method 
        //if w.getPOS() is a noun I would add it to a separate vector 
    } 

} 

}

편집 : 그냥 다른 생각 - 그것은 w = dict.getIndexWord(s1[i], POS.NOUN) 같은 것을 사용하는 신뢰할 수있는 것, 명사가 존재하지 않으면 w는 null이 될 것인가? 이게 뭔가 가치있는 일 이겠니?

EDIT2 : 그렇다면 내 질문에 atm은 WordNet 개체로 문자열 (단어)을 변환 할 수있는 방법이 있다면, 나는 그것에 getPOS()를 사용할 수 있습니까?

+0

예제를 추가했습니다. – user573382

+0

이 모양이 올바르지 않습니다. dict.open()의 결과를 사용해야한다고 생각합니다. 그렇습니까? 문장에서 문자를 반복 할 때 어떤 용도가 있습니까? – ControlAltDel

+0

어쩌면 sentence1.split ("")을 원하십니까? – ControlAltDel

답변

1

당신의 접근 방식은 다른 라이브러리를 사용하는 것처럼 잘 작동하지 않을 것입니다. WordNet은 파서가 아닌 스테로이드에서 '사전/시소러스'로 설계되었습니다. 스탠포드 파서는 대안을 찾을 수있는 좋은 장소입니다.

즉, 각 단어에 대해 조회를 수행 할 수 있지만 명사가 모두 있고 동사라고하면 구문을 고려하지 않아서 구별 할 수 없습니다.

This 시작해야합니다 (하단의 예 참조). 명사에 대한 조회를 수행하고, 다시 돌아 오지 않으면 삭제합니다.

0

JWNL의 경우 다음과 같이 작동하지만 동일한 지 여부는 알 수 없습니다.

문제가 POS (품사 태그)를 얻는 것으로 알고있는 경우. 이렇게하려면 스탠포드 포스 타거 (Stanford Pos Tagger)와 같은 다른 도구를 사용해야합니다. 그러나이 방법으로 각 단어 문자열에 대한 문자열을 얻습니다. 따라서 문자열 형식의 POS에서 JWNL의 POS 클래스에있는 POS로 변환해야합니다.