强制 spaCy 引理为小写

ada*_*its 4 python lemmatization 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)
Run Code Online (Sandbox Code Playgroud)

在情况 1 中,我希望匹配不区分大小写,并且如果 spaCy 库中有某些内容可以强制默认情况下引理小写,那么这比保留文档的多个版本并强制拥有所有版本要高效得多小写字符。

小智 7

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")
Run Code Online (Sandbox Code Playgroud)

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

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