Как найти связанные с производной формы набора словесности через 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;
}
}