Python 强制spaCy引理为小写

Python 强制spaCy引理为小写,python,spacy,lemmatization,Python,Spacy,Lemmatization,是否可以将标记文本保留为true大小写,但强制将引理小写?我对此很感兴趣,因为我想使用PhraseMatcher,在这里我通过pipleline运行一个输入文本,然后在该文本上搜索匹配的短语,其中每个搜索查询可以区分大小写,也可以不区分大小写。在使用引理搜索的情况下,我希望搜索在默认情况下不区分大小写 e、 g 在案例1中,我希望匹配是不区分大小写的,如果spaCy库中有一些东西强制要求引理在默认情况下是小写的,那么这将比保持文档的多个版本并强制其中一个版本具有所有小写字符要有效得多。spaCy

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

e、 g


在案例1中,我希望匹配是不区分大小写的,如果spaCy库中有一些东西强制要求引理在默认情况下是小写的,那么这将比保持文档的多个版本并强制其中一个版本具有所有小写字符要有效得多。

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
使用词性标记信息,所以我不确定它在什么时候被调用。在
标记器之后放置管道是安全的,所有的引理都应该在那时解决

我能想到的另一个选择是从
lemmatizer
类派生一个定制的lemmatizer,并重写它的
\uuuuuu调用\uuuuuu
方法,但这可能非常具有侵入性,因为您需要弄清楚如何(以及在哪里)插入自己的lemmatizer

# 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")