【问题标题】:NLTK Brill Tagger Splitting WordsNLTK Brill 标注器拆分词
【发布时间】:2015-11-13 09:04:27
【问题描述】:

我正在使用 python 版本 3.4.1 和 NLTK 版本 3,并且我正在尝试使用他们的 Brill Tagger。

这是 brill 标注器的训练代码:

import nltk
from nltk.tag.brill import *
import nltk.tag.brill_trainer as bt
from nltk.corpus import brown

Template._cleartemplates()
templates = fntbl37()
tagged_sentences = brown.tagged_sents(categories = 'news')
tagged_sentences = tagged_sentences[:]
tagger = nltk.tag.BigramTagger(tagged_sentences)
tagger = bt.BrillTaggerTrainer(tagger, templates, trace=3)
tagger = tagger.train(tagged_sentences, max_rules=250)
print(tagger.evaluate(brown.tagged_sents(categories='fiction')[:]))
print(tagger.tag("Hi I am Harry Potter."))

然而,最后一个命令的输出是:

[('H', 'NN'), ('i', 'NN'), (' ', 'NN'), ('I', 'NN'), (' ', 'NN'), ('a', 'AT'), ('m', 'NN'), (' ', 'NN'), ('H', 'NN'), ('a', 'AT'), ('r', 'NN'), ('r', 'NN'), ('y', 'NN'), (' ', 'NN'), ('P', 'NN'), ('o', 'NN'), ('t', 'NN'), ('t', 'NN'), ('e', 'NN'), ('r', 'NN'), ('.', '.')]

如何阻止它将单词拆分为字母并标记字母而不是单词?

【问题讨论】:

    标签: python nltk pos-tagger


    【解决方案1】:

    标记tag() 函数需要一个标记列表作为输入。 因为你给它一个字符串作为输入,这个字符串被解释为一个列表。 将字符串转换为列表会为您提供字符列表:

    >>> list("abc")
    ['a', 'b', 'c']
    

    您需要做的就是在标记之前将您的字符串转换为标记列表。例如使用nltk 或简单地在空格处拆分:

    >>> import nltk
    >>> nltk.word_tokenize("Hi I am Harry Potter.")
    ['Hi', 'I', 'am', 'Harry', 'Potter', '.']
    >>> "Hi I am Harry Potter.".split(' ')
    ['Hi', 'I', 'am', 'Harry', 'Potter.']
    

    在标记中添加标记化会产生以下结果:

    print(tagger.tag(nltk.word_tokenize("Hi I am Harry Potter.")))
    [('Hi', 'NN'), ('I', 'PPSS'), ('am', 'VB'), ('Harry', 'NN'), ('Potter', 'NN'), ('.', '.')]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-04-04
      • 1970-01-01
      • 2015-02-20
      • 1970-01-01
      • 2012-11-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多