Rob*_*Dam 12
不幸的是,您无法从WordNet同义词中可靠地确定正确的名词信息.您正在寻找的是命名实体识别.从维基百科页面可以找到Java中提供的多个版本的链接.我个人推荐Stanford NER或LingPipe.
更新:
基于没有上下文单词的附加约束,您可以使用大写作为主要指标,然后仔细检查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年前)时,上位词/下位词关系不是非常可靠或一致,这可能会导致很多假阴性(并且没有改善我上面提到的误报因为那些是完全的依赖于上下文).
该信息似乎没有专门存储在 WordNet 中。但是,您可以查看名词 sysnet 的第一个单词形式,看看它是否大写。不确定这有多官方,但它似乎可以告诉我们,fly 不是一个专有名词,而 France 是一个专有名词。