python - 强制 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 并强制一个拥有所有小写字符。
解决方案
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__
方法,但这可能非常具有侵入性,因为您需要弄清楚如何(以及在何处)插入自己的词形还原器。
推荐阅读
- ios - MDCTabBar 选择指示器动画
- mysql - Docker连接phpmyadmin和mysql
- c# - 将 asmx Web 服务部署到共享托管服务器
- jakarta-ee - 测试文件中出现“找不到符号”错误
- c++ - Thrift C++ 链接器错误(增强智能指针)
- haskell - Esqueleto 中的行数和类似内容
- x86 - 从 x86 CPU 生成 64 字节读取 PCIe TLP
- vba - ms访问vba listbox.rowsource在添加where子句时格式化没有结果
- puppet - 获取问题 wuth puppet 模块 pcfens/filebeat
- css - 如何改变CF7的宽度?