为什么 WordNet 和 JWI 词干提取器在 "order" 词干提取的结果中给出 "ord" 和 "orde"?
Why WordNet and JWI stemmer gives "ord" and "orde" in result of "order" stemming?
我正在使用 WordNet 和 JWI 2.4.0 进行一个项目。
目前,我在包含的词干分析器中放入了很多词,它似乎有效,直到我要求 "order"。
词干分析器回答我 "order"、"orde" 和 "ord" 是 "order" 的可能词干。
我不是以英语为母语的人,但是...我一生中从未见过 "ord" 这个词...当我向 WordNet 词典查询此定义时:显然没有任何内容。 (在BabelNet online上,我发现这是一个Nebraska的小镇!)
嗯,为什么会有这个奇怪的词干?
如何过滤 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);
}
}
}
词干本身不一定是单词。 "Order" 和 "Ordinal" 共享词干 "Ord"。
这里的根本问题是词干与拼写有关,但语言演变与拼写的关系很弱(尤其是 英语)。作为程序员,我们更愿意将词干描述为正则表达式,例如^ord[ie]
。这表明它不是 "ordained"
的词干
我正在使用 WordNet 和 JWI 2.4.0 进行一个项目。 目前,我在包含的词干分析器中放入了很多词,它似乎有效,直到我要求 "order"。 词干分析器回答我 "order"、"orde" 和 "ord" 是 "order" 的可能词干。 我不是以英语为母语的人,但是...我一生中从未见过 "ord" 这个词...当我向 WordNet 词典查询此定义时:显然没有任何内容。 (在BabelNet online上,我发现这是一个Nebraska的小镇!)
嗯,为什么会有这个奇怪的词干? 如何过滤 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);
}
}
}
词干本身不一定是单词。 "Order" 和 "Ordinal" 共享词干 "Ord"。
这里的根本问题是词干与拼写有关,但语言演变与拼写的关系很弱(尤其是 英语)。作为程序员,我们更愿意将词干描述为正则表达式,例如^ord[ie]
。这表明它不是 "ordained"