代码之家  ›  专栏  ›  技术社区  ›  mllamazares

为什么python nltk不能用西班牙语正确标记?

  •  1
  • mllamazares  · 技术社区  · 6 年前

    我有以下代码:

    import nltk
    
    sent='El gato está bajo la mesa de cristal.'
    nltk.pos_tag(word_tokenize(sent), lang='spa')
    

    但是输出根本不准确:

    [('El', 'NNP'),
     ('gato', 'NN'),
     ('está', 'NN'),
     ('bajo', 'NN'),
     ('la', 'FW'),
     ('mesa', 'FW'),
     ('de', 'FW'),
     ('cristal', 'NN'),
     ('.', '.')]
    

    例如, es 应归类为动词。

    如果我使用英语短语尝试相同的方法:

    import nltk
    
    sent='The cat is under the cristal table.'
    nltk.pos_tag(word_tokenize(sent), lang='spa')
    

    效果不错:

    [('The', 'DT'),
     ('cat', 'NN'),
     ('is', 'VBZ'),
     ('under', 'IN'),
     ('the', 'DT'),
     ('cristal', 'NN'),
     ('table', 'NN'),
     ('.', '.')]
    

    注意,我已经下载了所有的NLTK资源。你能告诉我这里遗漏了什么吗?这样标签这个词就不能用西班牙语了。

    1 回复  |  直到 6 年前
        1
  •  1
  •   mllamazares    6 年前

    我找到了 the following solution

    from nltk.tag import StanfordPOSTagger
    jar = 'D:/Downloads/stanford-postagger-full-2018-10-16/stanford-postagger-3.9.2.jar'
    model = 'D:/Downloads/stanford-postagger-full-2018-10-16/models/spanish.tagger'
    
    import os
    java_path = "C:/Program Files/Java/jre1.8.0_191/bin/java.exe"
    os.environ['JAVAHOME'] = java_path
    
    pos_tagger = StanfordPOSTagger(model, jar, encoding='utf8' )
    pos_tagger.tag('El gato está bajo la mesa de cristal'.split())
    

    结果:

    [('El', 'da0000'),
     ('gato', 'nc0s000'),
     ('está', 'vmip000'),
     ('bajo', 'sp000'),
     ('la', 'da0000'),
     ('mesa', 'nc0s000'),
     ('de', 'sp000'),
     ('cristal', 'nc0s000')]