【问题标题】:SpaCy: How to manually set POS tag for vertical bar "|"?SpaCy:如何手动设置竖线“|”的POS标签?
【发布时间】:2020-11-07 20:02:28
【问题描述】:

当文本被 SpaCy 标记时,竖线“|”根据上下文分配不同的 POS 标签,例如“ADV”、“DEL”……而我想要“|”被识别为“PUNC”。有没有办法强制这个 POS 用于“|” ?

我试过这个命令,但它不起作用。

nlp.tokenizer.add_special_case('|', [{ORTH: '|', POS: PUNC}])

【问题讨论】:

    标签: spacy pos-tagger


    【解决方案1】:

    我会在管道中添加一个简单的管道,就在 tagger 之后:

    def pos_postprocessor_pipe(doc) :
        for token in doc :
            if token.text == '|':
                token.pos_ = 'PUNCT'
        return doc
    
     nlp = spacy.load("en_core_web_sm")
     nlp.add_pipe(pos_postprocessor_pipe, name="pos_postprocessor", after='tagger')
    

    【讨论】:

      【解决方案2】:

      看起来您正在使用this question 中的方法覆盖标签,但这似乎是针对旧版本的 spaCy;它在 2.3.1 中不起作用。

      您可以在令牌上设置值,因此您可以执行以下操作:

      import spacy
      from spacy.symbols import NOUN
      nlp = spacy.load('en')
      
      words = nlp("...")
      for word in words:
          if word.text == "|":
              word.pos = NOUN
      

      但是,在导致问题的地方为管道添加异常可能更容易。


      为管道添加异常如下所示。

      for word in nlp(...):
          pos = word.pos_
          if word.text == "|":
              pos = "PUNCT"
          
          do_stuff(word, pos)
      

      【讨论】:

      • 能否请您添加一个“向管道添加异常”的示例?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-10
      • 1970-01-01
      • 1970-01-01
      • 2018-04-11
      • 1970-01-01
      相关资源
      最近更新 更多