Почему WordNet и JWI Stemermer дают "ord" и "orde" в результате "порядка"

Я работаю над проектом с использованием WordNet и JWI 2.4.0. В настоящее время я помещаю много слов во включенный стеммер, кажется, работает, пока я не попросил "порядок". Стеблер отвечает мне, что "порядок", "орде" и "орд" - это возможные основы "порядка". Я не являюсь носителем английского языка, но... я никогда не видел слово "ord" в своей жизни... и когда я спросил словарь WordNet для этого определения: очевидно, ничего нет. (В сети BabelNet я обнаружил, что это город в штате Небраска!)

Ну, а почему там этот странный стебель? Как я могу отфильтровать основы, которых нет в словаре WordNet? (потому что, когда я снова использую слова со стеблями, "orde" вызывает сбой программы)

Спасибо!

ОТВЕТ: Я не очень хорошо понял, что такое стебель. Итак, этот вопрос не имеет смысла.

Вот некоторый код для тестирования:

package JWIExplorer;

import java.io.File;
import java.io.IOException;
import java.net.URL;
import java.util.Arrays;
import java.util.Date;
import java.util.Iterator;
import java.util.List;

import edu.mit.jwi.Dictionary;
import edu.mit.jwi.IDictionary;
import edu.mit.jwi.morph.WordnetStemmer;

public class TestJWI
{

    public static void main(String[] args) throws IOException
    {
        List<String> WordList_Research = Arrays.asList("dog", "cat", "mouse");
        List<String> WordList_Research2 = Arrays.asList("order");

        String path = "./" + File.separator + "dict";
        URL url;

        url = new URL("file", null, path);

        System.out.println("BEGIN : " + new Date());

        for (Iterator<String> iterstr = WordList_Research2.iterator(); iterstr.hasNext();)
        {
            String str = iterstr.next();

            TestStem(url, str);
        }

        System.out.println("END : " + new Date());
    }

    public static void TestStem(URL url, String ResearchedWord) throws IOException
    {
        // construct the dictionary object and open it
        IDictionary dict = new Dictionary(url);
        dict.open();

        // First, let's check for the stem word
        WordnetStemmer Stemmer = new WordnetStemmer(dict);
        List<String> StemmedWords;

        // null for all words, POS.NOUN for nouns
        StemmedWords = Stemmer.findStems(ResearchedWord, null);
        if (StemmedWords.isEmpty())
            return;

        for (Iterator<String> iterstr = StemmedWords.iterator(); iterstr.hasNext();)
        {
            String str = iterstr.next();

            System.out.println("Local stemmed iteration on : " + str);
        }
    }

}

1 ответ

Решение

Основы не обязательно должны быть словами сами по себе. "Порядок" и "Порядковый" разделяют ствол "Орд".

Фундаментальная проблема здесь заключается в том, что основы связаны с орфографией, но эволюция языка и орфография только слабо связаны (особенно в английском). Как программист, мы бы предпочли описать основание как регулярное выражение, например ^ord[ie], Это фиксирует, что это не ствол "предопределенного"

Другие вопросы по тегам