首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么WordNet和JWI词干器在"order“词干产生"ord”和"orde“?

为什么WordNet和JWI词干器在"order“词干产生"ord”和"orde“?
EN

Stack Overflow用户
提问于 2017-10-06 11:33:32
回答 1查看 64关注 0票数 0

我正在使用WordNet和JWI2.4.0进行一个项目。目前,我在包含的词干机中放了很多单词,这似乎很有效,直到我要求“订购”。词干分析器回答我,"order“、"orde”和"ord“是"order”的可能词干。我不是说英语的人,但是.我从没见过“奥德”这个词.当我向WordNet字典询问这个定义时:显然什么都没有。(在BabelNet网上,我发现它是内布拉斯加州的一个小镇!)

为什么会有这么奇怪的茎?如何过滤WordNet字典中不存在的词干?(因为当我重复使用词干词时,"orde“使程序崩溃)

谢谢!

答:我不太明白什么是茎。所以这个问题是没有道理的。

下面是一些要测试的代码:

代码语言:javascript
复制
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);
        }
    }

}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-10-06 12:40:01

茎不一定需要自己做单词。"Order“和"Ord”共享词干“Ord”。

这里的基本问题是,词干与拼写有关,但语言演变和拼写只有微弱的关系(尤其是英语)。作为一名程序员,我们更愿意把词干描述为正则表达式,例如^ord[ie]。这说明这不是“注定”的根源

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46604810

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档