【问题标题】:Why WordNet and JWI stemmer gives "ord" and "orde" in result of "order" stemming?为什么 WordNet 和 JWI 词干分析器在“order”词干提取的结果中给出“ord”和“orde”?
【发布时间】:2017-10-06 11:33:32
【问题描述】:

我正在开发一个使用 WordNet 和 JWI 2.4.0 的项目。 目前,我在包含的词干分析器中添加了很多词,它似乎有效,直到我要求“订单”。 词干分析器回答我说“order”、“orde”和“ord”是“order”的可能词干。 我不是以英语为母语的人,但是......我一生中从未见过“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);
        }
    }

}

【问题讨论】:

    标签: wordnet jwi


    【解决方案1】:

    词干本身不一定是单词。 “Order”和“Ordinal”共享词干“Ord”。

    这里的根本问题是词干与拼写有关,但语言演变和拼写只是微弱的相关(尤其是在英语中)。作为程序员,我们更愿意将词干描述为正则表达式,例如^ord[ie]。这表明它不是“受命”的词干

    【讨论】:

    • Outch,所以我的错误是我不明白什么是词干的含义?那就谢谢你了。
    • @Metalman:语言学不像 comp.sci 或数学那样精确。 “词干”没有绝对准确的定义,但你确实似乎认为词干必须是词。这不是真的,至少在 WordNet 对词干的定义中不是这样。
    • 没错。谢谢你的回答!
    • 啊,我有另一个问题链接,引理是我在说的吗?通过阅读 JWI 的文档,我发现了一些非常接近我所想的东西(现有的最小单词)。 link to getLemma()
    • @Metalman:我想这取决于你所说的“最小”是什么意思。如果您的意思是在 Java String.length 意义上,它可能不是最小的。此外,引理可能不是实际的前缀。但我确实希望getLemma 在给定“订单”的情况下返回“订单”,并且它应该始终返回一个单词。更一般地说,我希望它是幂等的。对于任何 X,getLemma(getLemma(X)) 应该返回与 getLemma(X) 相同的结果。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-01
    • 2014-10-01
    • 2011-04-22
    • 1970-01-01
    • 2017-08-05
    相关资源
    最近更新 更多