Как найти связанные с производной формы набора словесности через MIT JWI?

При извлечении семантических отношений Synset через MIT Java Wordnet Interface (JWI) я просто не могу получить деривационно связанные формы. Я использую метод класса ISynset getRelatedSynsets(IPointer p), но список просто возвращается пустым.

В качестве простого теста я разработал класс, который выполняет итерацию всех существительных наборов словосочетания и пытается найти любой набор, отображающий форму, связанную с производными. Удивительно, но код не может найти единственную синхронизацию с этим отношением. Вот код:

public class DerivationallyTest {

    private static IDictionary dict = null;

    public static void main(String[] args) throws IOException {
        IDictionary dict = dicitionaryFactory();
        Iterator<ISynset> it = dict.getSynsetIterator(POS.NOUN);
        while(it.hasNext()){
            ISynset synset = it.next();
            if(synset.getRelatedSynsets(Pointer.DERIVATIONALLY_RELATED).size() > 0){
                System.out.println("FOUND ONE!!!");
            }
        }
    }



    public static IDictionary dicitionaryFactory() throws IOException{
        if(dict == null){
            System.out.println("Instanciando Dicionario...");
            // construct the URL to the Wordnet dictionary directory
            String wnhome = System.getenv("WNHOME");
            String path = wnhome + File.separator + "dict"; 
            URL url = new URL("file", null, path);
            // construct the dictionary object and open it
            dict = new Dictionary(url); 
            dict.open();
        }
        return dict;
    }
}

Я делаю что-то не так или это действительно странное поведение? Я уже разработал множество классов с использованием MIT JWI и не хотел бы переходить на другой API после некоторой большой работы.

Я использую Wordnet 3.1 и MIT JWI 2.2.3 под Ubuntu 12 LTS

ОБНОВЛЕНИЕ: Я также попробовал с Wordnet 3.0, и то же самое происходит.

2 ответа

Решение

Только семантические указатели присоединяются к синтаксисам. Лексические указатели прикрепляются только к словам. Попробуйте: IWord.getRelatedWords (IPointer ptr)

http://projects.csail.mit.edu/jwi/api/edu/mit/jwi/item/ISynset.html

Как указывает @ethereous, похоже, что Pointer.DERIVATIONALLY_RELATED является лексическим указателем, в то время как другие, такие как Pointer.HYPERNYM и Pointer.HOLONYM, являются семантическим указателем. Класс, который я написал по этому вопросу, должен быть переписан примерно так, как показано ниже.

public class DerivationallyTest {

    private static IDictionary dict = null;

    public static void main(String[] args) throws IOException {
        IDictionary dict = dicitionaryFactory();
        Iterator<ISynset> it = dict.getSynsetIterator(POS.NOUN);
        while(it.hasNext()){
            ISynset synset = it.next();
            //HERE COMES THE CHANGE!!!! (the ".getWords().get(0).getRelatedWords()")
            if(synset.getWords().get(0).getRelatedWords(Pointer.DERIVATIONALLY_RELATED).size()>0){
                System.out.println("FOUND ONE!!!");
            }
        }
    }



    public static IDictionary dicitionaryFactory() throws IOException{
        if(dict == null){
            System.out.println("Instanciando Dicionario...");
            // construct the URL to the Wordnet dictionary directory
            String wnhome = System.getenv("WNHOME");
            String path = wnhome + File.separator + "dict"; 
            URL url = new URL("file", null, path);
            // construct the dictionary object and open it
            dict = new Dictionary(url); 
            dict.open();
        }
        return dict;
    }
}
Другие вопросы по тегам