使用WordNet检测专有名词?

2022-09-04 20:02:56

我正在使用JAWS访问WordNet。给定一个词,有没有办法检测它是否是专有名词?看起来合成集具有相当粗糙的词法类别。

为了澄清,这些词没有上下文 - 它们只是单独呈现。如果一个词可以用作常用名词,那是可以接受的。所以“标记”很好,因为虽然它可能是某人的名字,但它也可以指一个点。然而,“非洲”不是。


答案 1

不幸的是,您将无法可靠地从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;
}

这将消除这样的误报:

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

并且仍然只捕获大写的名词

马可福音中,它说...
你最近听过《根源》或《谁》吗?

但仍然给你误报

标记第一个实例...
,丹诺。

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

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


答案 2

如果您使用linux命令行来使用Wordnet,则可以使用“wn -synsn”来获取单词的所有合成集。专有名词将大写。例如,

$: wn mark -synsn

   Synonyms/Hypernyms (Ordered by Estimated Frequency) of noun mark
   15 senses of mark                                                       

   Sense 1
   mark, grade, score
         => evaluation, valuation, rating
   .
   .
   .
   Sense 8
   Mark, Saint Mark, St. Mark
         INSTANCE OF=> Apostle, Apostelic Father
         INSTANCE OF=> Evangelist
         INSTANCE OF=> saint

但是,说真的,请不要只依靠Wordnet来做到这一点。可能存在大量专有名词,Wordnet不会为您获取任何信息。例如,试试亨里克这个名字吧!

但是,您可以从Google n-gram语料库等数据集中为单词w构建上下文,并使用此类上下文构建返回置信度分数的分类器(即,分类器可以说w是一个专有名词,0 < = c <= 1置信度。


推荐