时间:2015-07-15 15:27:53

标签: stanford-nlp

我知道如何在文本中找到一个单词的位置,但我需要知道句子中单词的可能位置,例如“like”可以有4个部分的单词:动词名词介词... 。 是否有可能从斯坦福图书馆那里得到它?

1 个答案:

答案 0 :(得分:3)

斯坦福CoreNLP似乎没有与WordNet的接口,但使用其他一个小型Java WordNet库很容易做到这一点。在本例中,我使用了JWI 2.3.3

除了JWI,您还需要下载WordNet数据库的副本。例如,您可以下载WordNet-3.0.tar.gz from Princeton。解读字典。

以下代码包含一个函数,该函数返回单词的可能词性列表:

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collection;

import edu.mit.jwi.Dictionary;
import edu.mit.jwi.item.POS;
import edu.mit.jwi.item.IIndexWord;
import edu.mit.jwi.morph.WordnetStemmer;

public class WNDemo {

  /**
   * Given a dictionary and a word, find all the parts of speech the
   * word can be.
   */
  public static Collection getPartsOfSpeech(Dictionary dict, String word) {
    ArrayList<POS> parts = new ArrayList<POS>();
    WordnetStemmer stemmer = new WordnetStemmer(dict);
    // Check every part of speech.
    for (POS pos : POS.values()) {
      // Check every stem, because WordNet doesn't have every surface
      // form in its database.
      for (String stem : stemmer.findStems(word, pos)) {
        IIndexWord iw = dict.getIndexWord(stem, pos);
        if (iw != null) {
          parts.add(pos);
        }
      }
    }
    return parts;
  }

  public static void main(String[] args) {
    try {
      Dictionary dict = new Dictionary(new File("WordNet-3.0/dict"));
      dict.open();
      System.out.println("'like' is a " + getPartsOfSpeech(dict, "like"));
    } catch (IOException e) {
      System.err.println("Error: " + e);
    }
  }
}

输出:

'like' is a [noun, verb, adjective]