【问题标题】:Force spaCy lemmas to be lowercase强制 spaCy 引理为小写
【发布时间】:2020-11-09 20:23:02
【问题描述】:

是否可以将标记文本保留为真实大小写,但强制引理小写?我对此感兴趣,因为我想使用PhraseMatcher 通过管道运行输入文本,然后在该文本上搜索匹配的短语,其中每个搜索查询可以区分大小写或不区分大小写。在我按引理搜索的情况下,我希望搜索默认不区分大小写。

例如

doc = nlp(text)

for query in queries:
    if case1:
         attr = "LEMMA"
    elif case2:
         attr = "ORTH"
    elif case3:
         attr = "LOWER"
    phrase_matcher = PhraseMatcher(self.vocab, attr=attr)
    phrase_matcher.add(key, query)
    matches = phrase_matcher(doc)

在情况 1 中,我希望匹配不区分大小写,如果 spaCy 库中有一些东西可以强制默认情况下词元小写,这将比保留多个版本的文档并强制一个更有效具有所有小写字符。

【问题讨论】:

    标签: python spacy lemmatization


    【解决方案1】:

    spacy 的这一部分随着版本的变化而变化,上次我查看词形还原是在几个版本之前。所以这个方案可能不是最优雅的方案,但绝对是一个简单的方案:

    # Create a pipe that converts lemmas to lower case:
    def lower_case_lemmas(doc) :
        for token in doc :
            token.lemma_ = token.lemma_.lower()
        return doc
    
    # Add it to the pipeline
    nlp.add_pipe(lower_case_lemmas, name="lower_case_lemmas", after="tagger")
    

    您需要确定将其添加到管道中的哪个位置。最新文档提到 Lemmatizer 使用 POS 标记信息,所以我不确定它在什么时候被调用。在tagger 之后放置你的管道是安全的,到那时应该弄清楚所有的引理。

    我能想到的另一个选择是从Lemmatizer 类派生一个自定义词形还原器并覆盖其__call__ 方法,但这可能非常具有侵入性,因为您需要弄清楚如何(以及在​​何处)插入在你自己的词形还原器中。

    【讨论】:

      猜你喜欢
      • 2010-10-04
      • 2011-10-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-16
      • 2011-06-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多