用WordNet检测专有名词?

Nic*_*ner 10 java nlp wordnet

我正在使用JAWS访问WordNet.有一个词,有没有办法检测它是否是一个专有名词?看起来这些同义词具有相当粗略的词汇类别.

澄清一下,没有任何语境 - 它们只是单独呈现.如果一个词可以想象地被用作普通名词,那么它是可以接受的.所以"标记"很好,因为虽然它可能是某人的名字,但它也可以指代一个点.但是,"非洲"不是.

Rob*_*Dam 12

不幸的是,您无法从WordNet同义词中可靠地确定正确的名词信息.您正在寻找的是命名实体识别.从维基百科页面可以找到Java中提供的多个版本的链接.我个人推荐Stanford NERLingPipe.

更新:

基于没有上下文单词的附加约束,您可以使用大写作为主要指标,然后仔细检查WordNet以查看该单词是否可以用作名词.也许是这样的:

String word = "foo";
boolean isProperNoun = false;
if (Character.isUpperCase(word.charAt(0))) {
    WordNetDatabase database = WordNetDatabase.getFileInstance();
    Synset[] synsets = database.getSynsets(word, SynsetType.NOUN);
    isProperNoun = synsets.length > 0;
}
Run Code Online (Sandbox Code Playgroud)

这将消除这样的误报:

如果你建造它...
你所愿......
罗密欧,罗密欧......

而且仍然只是抓住了大写的名词

标志,它说......
你有没有听说过的或该最近还好吗?

但仍然给你误报

标记第一个实例......
预订他们,Danno.

因为它们可能是,但没有上下文你不知道.

如果你想变得非常棘手,你可以跟踪任何名词上的hypernym树,看看你是否达到了像'公司'或'国家'那样明显的东西.然而,上次我使用WordNet(4年前)时,上位词/下位词关系不是非常可靠或一致,这可能会导致很多假阴性(并且没有改善我上面提到的误报因为那些是完全的依赖于上下文).


Pac*_*ace 1

该信息似乎没有专门存储在 WordNet 中。但是,您可以查看名词 sysnet 的第一个单词形式,看看它是否大写。不确定这有多官方,但它似乎可以告诉我们,fly 不是一个专有名词,而 France 是一个专有名词。