NLP Spacy 添加特殊情况以识别 USD 以外的货币(即 CAD)

NLP Spacy add special case to recognize currency other than USD (ie. CAD)

我正在做一个非常简单的任务,我需要在字符串中提取美元金额。 我试过 Spacy,但它只识别 1000 美元而不是 1000 加元。 我尝试添加一个特例

special_case = [{
        'ORTH': 'CAD', 
        'TAG': '$', 
        'IS_CURRENCY': True}]
nlp.tokenizer.add_special_case('CAD', special_case)

运气不好。

示例:

doc = nlp('I will pay you 1000 CAD tomorrow')
extracted_money = [ent.text for ent in doc.ents if ent.label_ == 'MONEY']

正在寻找 return 我 extracted_money =['1000 CAD']

的解决方案

感谢任何帮助。

您可以使用 spacy.matcher.Matcher:

import spacy
from spacy.matcher import Matcher

nlp = spacy.load("en_core_web_sm")
doc = nlp('I will pay you 1000 CAD tomorrow')
matcher = Matcher(nlp.vocab)  
pattern = [{'IS_DIGIT': True}, {'TEXT':'CAD'}] # NUMBER + CAD
matcher.add('CAD', [pattern])

matches = matcher(doc)
for match_id, start, end in matches:
    string_id = nlp.vocab.strings[match_id]  # Get string representation
    span = doc[start:end]  # The matched span
    print( match_id, string_id, start, end, '->', span.text, '<-')

输出:

5189151114763691552 CAD 4 6 -> 1000 CAD <-

此处的模式是 [{'IS_DIGIT': True}, {'TEXT':'CAD'}]:一个数字标记后跟一个 CAD 标记。