首页 > 解决方案 > 强制 spaCy 引理为小写

问题描述

是否可以将标记文本保留为真实大小写,但强制引理小写?我对此感兴趣,因为我想使用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 库中有一些东西可以强制默认情况下引理为小写,这将比保留多个版本的 doc 并强制一个拥有所有小写字符。

标签: pythonspacylemmatization

解决方案


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__方法,但这可能非常具有侵入性,因为您需要弄清楚如何(以及在​​何处)插入自己的词形还原器。


推荐阅读