【问题标题】:Detect Proper Nouns with WordNet?用 WordNet 检测专有名词?
【发布时间】:2009-12-28 03:27:16
【问题描述】:

我正在使用JAWS 访问WordNet。给定一个单词,有没有办法检测它是否是专有名词?看起来同义词集的词汇类别非常粗略。

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

【问题讨论】:

    标签: java nlp wordnet


    【解决方案1】:

    很遗憾,您将无法从 WordNet 同义词集中可靠地确定专有名词信息。您正在寻找的是Named Entity Recognition。维基百科页面上有几个 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;
    }
    

    这样可以消除这样的误报:

    如果你建造它......
    你希望......
    罗密欧,罗密欧......

    并且仍然只捕获

    中的大写名词

    MarkBook中说...
    你最近听过RootsWho吗?

    但仍然会给你误报

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

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

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

    【讨论】:

    • NER 通常取决于是否存在上下文。
    • 我修改了答案以反映缺乏上下文。
    【解决方案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 可能无法获取大量专有名词的任何信息。试试 Henrik 这个名字吧!

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

    【讨论】:

      【解决方案3】:

      让我从你身边。您可能需要运行更多关于英语的书籍,以深入了解一个事实,即无法脱离上下文确定单词的词性。

      您可以做的最好的事情是测试排除...确定 WordNet 知道在给定的词性中没有任何用法。在某些情况下,您可能会发现 WordNet 中只列出了一个词性。例如,我知道“汽车”除了用作名词之外没有其他用法。

      区分专有名词和普通名词更加困难。当然你可以使用启发式......一个不是句子的首词并且大写但不是全大写的名词可能是一个专有名词。

      最终,区别在于语义而不是词法分析。我怀疑你会根据在 WordNet 中查找单词找到一个相当强大的解决方案。我认为您需要先进行自然语言语法解析,然后才能可靠地提取名词,更不用说检测散文中的正确名词了。

      【讨论】:

        【解决方案4】:

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

        【讨论】:

        • 这会认为句子开头的所有名词都是正确的。我真的希望我们为这样的事情改变我们的语法规则,因为它们会引入歧义,并且据我所知除了美学之外没有任何功能。
        • 其实我还是没看出来,在句首跟事物有什么关系。与其只检查大写单词的名词性,不如先检查每个单词的名词性。然后检查它是否在 WordNet 中大写。如果它在您的原始文档中大写,则没有区别。无论您传入的是“book”还是“Book”,WordNet 都会返回“book”。至于“mark”和“Mark”的问题,只要搜索一个名词同义词的所有形式,看看有没有大写的。
        猜你喜欢
        • 2013-07-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-05-20
        相关资源
        最近更新 更多