जावा में एक शब्द के लिए विलोम शब्द प्राप्त करें - वर्डनेट JWI

Dec 22 2020

मुझे जावा में वर्डनेट का उपयोग करते हुए एक शब्द के लिए विलोम खोजने में रुचि है। मैं वर्तमान में इस विधि का उपयोग विलोम खोजने के लिए कर रहा हूं, लेकिन मुझे अभी तक कोई भी शब्द नहीं मिला है, जिसमें विलोम हैं। क्या वर्डनेट में विलोम शब्द आम नहीं हैं? या क्या यह कार्यान्वयन त्रुटिपूर्ण है?

public List<String> getAntonyms(String baseWord) {
    List<String> synonymList = new ArrayList<>();
    IIndexWord[] baseWordPOS = getAllPOSForBaseWord(baseWord);
    for (IIndexWord iIndexWord : baseWordPOS) {
        if (iIndexWord == null) {
            continue;
        }
        for (IWordID wordID : iIndexWord.getWordIDs()) {
            IWord word = dict.getWord(wordID);
            ISynset synset = word.getSynset();
            Map<IPointer, List<ISynsetID>> relatedMap = synset.getRelatedMap();
            for (Map.Entry<IPointer, List<ISynsetID>> entry : relatedMap.entrySet()) {
                IPointer iPointer = entry.getKey();
                if (iPointer.equals(Pointer.ANTONYM)) {
                    List<ISynsetID> iSunsetIDS = entry.getValue();
                    for (ISynsetID iSynsetID : iSunsetIDS) {
                        ISynset synset1 = dict.getSynset(iSynsetID);
                        for (IWord w : synset1.getWords()) {
                            synonymList.add(ConvertToPolyFormat(w.getLemma()));
                        }
                    }
                }
            }
        }
    }
    return synonymList.stream()
            .distinct()
            .filter(s -> !s.equals(baseWord))
            .collect(Collectors.toList());
} 

मैं इन शब्दों के साथ परीक्षण कर रहा हूं:

String[] testWords = {"able", "unable", "adsorbent", "apple", "tart", "computer", "cat", "great", "allowable"};

लेकिन वे सभी खाली सूची लौटाते हैं। मैं भाषण के सभी भागों (पीओएस) शब्द के लिए जाँच कर रहा हूँ:

private static final POS[] POS_ARRAY = {POS.ADJECTIVE, POS.ADVERB, POS.NOUN, POS.VERB};
private IIndexWord[] getAllPOSForBaseWord(String baseWord) {
    IIndexWord[] returnValue = new IIndexWord[4];
    for (int i = 0; i < returnValue.length; i++) {
        returnValue[i] = dict.getIndexWord(baseWord, POS_ARRAY[i]);
    }
    return returnValue;
}

मैंने समानार्थक शब्द खोजने के लिए इसी दृष्टिकोण का उपयोग किया लेकिन जाँच की कि क्या सूचक प्रकार / हाइपरनेम / आदि से संबंधित है ... और उस क्रियान्वयन में सफलता मिली।

अन्य सूचना:

dictचर से एक IDictionary वस्तु है ( edu.mit.jwi.IDictionary)

जवाब

1 ThuatNguyen Dec 23 2020 at 15:59

मुझे लगता है कि आप गलत हो गए relatedMap। मैंने आपका कोड इस तरह और सफलतापूर्वक बदल दिया है:

public List<String> getAntonyms(String baseWord) {
    List<String> synonymList = new ArrayList<>();
    IIndexWord[] baseWordPOS = getAllPOSForBaseWord(baseWord);
    for (IIndexWord iIndexWord : baseWordPOS) {
        if (iIndexWord == null) {
            continue;
        }
        for (IWordID wordID : iIndexWord.getWordIDs()) {
            IWord word = dict.getWord(wordID);

            Map<IPointer, List<IWordID>> relatedMap = word.getRelatedMap();
            for (Map.Entry<IPointer, List<IWordID>> entry : relatedMap.entrySet()) {
                IPointer iPointer = entry.getKey();
                if (iPointer.equals(Pointer.ANTONYM)) {
                    List<IWordID> iWordIDs = entry.getValue();
                    for (IWordID iWordID : iWordIDs) {
                        IWord iWord = dict.getWord(iWordID);
                        ISynset synset = iWord.getSynset();
                        for (IWord w : synset.getWords()) {
                            synonymList.add(ConvertToPolyFormat(w.getLemma()));
                        }
                    }
                }
            }
        }
    }
    return synonymList.stream()
            .distinct()
            .filter(s -> !s.equals(baseWord))
            .collect(Collectors.toList());
}