【问题标题】:Problem with using spacy.matcher.matcher.Matcher.add() method使用 spacy.matcher.matcher.Matcher.add() 方法的问题
【发布时间】:2021-02-11 22:53:20
【问题描述】:

尝试使用 spacy matcher 时出现错误:

~\Anaconda3\lib\site-packages\spacy\matcher\matcher.pyx in spacy.matcher.matcher.Matcher.add()
TypeError: add() takes exactly 2 positional arguments (3 given)

spacy.matcher.matcher.Matcher.add() 有什么替代功能吗?

【问题讨论】:

    标签: spacy matcher


    【解决方案1】:

    SpaCy Matcher.add() documentation

    在 v3.0 中更改
    从 spaCy v3.0 开始,Matcher.add 将模式列表作为第二个参数(而不是可变数量的参数)。 on_match 回调成为可选的关键字参数。

    patterns = [[{"TEXT": "Google"}, {"TEXT": "Now"}], [{"TEXT": "GoogleNow"}]] - matcher.add("GoogleNow", on_match, *patterns) + matcher.add("GoogleNow", patterns, on_match=on_match)

    示例用法:

    from spacy.matcher import Matcher
    
    matcher = Matcher(nlp.vocab)
    pattern = [{"LOWER": "hello"}, {"LOWER": "world"}]
    matcher.add("HelloWorld", [pattern])
    doc = nlp("hello world!")
    matches = matcher(doc)
    

    【讨论】:

      【解决方案2】:

      而不是使用matcher.add('Relation_name', None, pattern)

      您可以使用:matcher.add('Relation_name', [pattern], on_match=None)

      【讨论】:

      • 这项工作适用于最新版本的 spacy,谢谢!!!
      【解决方案3】:

      另外,如果你有多个模式要提取,一个例子如下。

      import spacy
      nlp = spacy.load('en_core_web_sm')
      
      from spacy.matcher import Matcher
      matcher = Matcher(nlp.vocab)
      
      pattern1 = [{'LOWER':'solarpower'}]
      pattern2 = [{'LOWER':'solar'},{'IS_PUNCT':True},{'LOWER':'power'}]
      pattern3 = [{'LOWER':'solar'},{'LOWER':'power'}]
      
      matcher.add('SolarPower', [pattern1,pattern2,pattern3])
      doc = nlp(u"The Solar Power industry continues to grow a solarpower increases. Solar-power is good")
      found_matches = matcher(doc)
      
      
      for _,start,end in found_matches:
          span = doc[start:end]
          print(span)
      

      输出将是:

      Solar Power 
      solarpower 
      Solar-power
      

      【讨论】:

        【解决方案4】:

        该模式应该被 2 个外部方括号包围才能起作用(粗体表示清楚)。然后它会工作并在文本中找到模式

        pattern = [[{"TEXT": "iPhone"}, {"TEXT": "X"}]]

        将模式添加到匹配器

        matcher.add("IPHONE_X_PATTERN", 模式)

        【讨论】:

          猜你喜欢
          • 2011-10-03
          • 2012-05-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-07-26
          • 2014-01-16
          • 2018-12-30
          相关资源
          最近更新 更多