如何使spaCy对大小写不敏感

6

如何在查找实体名称时使spaCy不区分大小写?

是否有需要添加的代码片段或其他东西,因为问题可能提到未使用大写的实体?

def analyseQuestion(question):

    doc = nlp(question)
    entity=doc.ents 

    return entity

print(analyseQuestion("what is the best seller of Nicholas Sparks "))  
print(analyseQuestion("what is the best seller of nicholas sparks "))    

这提供了

(Nicholas Sparks,)  
()
2个回答

0

-1

这很容易。你只需要在函数中添加一个预处理步骤question.lower()

def analyseQuestion(question):

    # Preprocess question to make further analysis case-insensetive
    question = question.lower()

    doc = nlp(question)
    entity=doc.ents 

    return entity

这个解决方案受到了来自Rasa NLU库的此代码的启发。然而,对于非英语(非ASCII)文本可能无法正常工作。针对这种情况,您可以尝试:

question = question.decode('utf8').lower().encode('utf8')

然而,spacy中的NER模块在某种程度上取决于令牌的大小写,因为它是一个统计训练模型,所以您可能会遇到一些差异。请参考此链接


9
我不确定这是否回答了问题。我认为原帖作者想要的是即使句子(和潜在实体)都是小写,也能够检测到像 (Nicholas Sparks,) 这样的实例的方法。 - arturomp
@arturomp 为什么不将句子预处理为小写,应用在小写数据上训练的命名实体识别器,识别实体,返回该句子中实体的位置,并根据位置显示原始句子的部分内容呢? - Logan Yang
2
@LoganYang 是的 - 关键在于“使用小写数据训练的NER”,这正是OP正在寻找的。本帖中尝试的解决方案与OP已经尝试并报告未能正常工作的第二个示例相同(其中未检测到小写的“nicholas sparks”)。 - arturomp
1
我明白你的意思。我以为这个答案是关于小写字母训练的,但实际上它只是在预测时转换为小写字母。OP 需要的是从一开始就用小写字母进行训练。 - Logan Yang

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接