spacy 中的数学表达式

Math expressions in spacy

使用 python 和 spacy(德语)来分析包括数学表达式在内的数学任务:是否可以标记这些数学表达式?例如与 {}:

Two cyclists {A} and {B}, {120 miles} apart, approach each other, each pedaling at {10 mph}. 

现在(没有 {})A 和 B 有不同的标签(德语:NOUN 和 X)。

是的,完全可以做到。首先,你应该定义一个新的'math'属性,表明这个标记与数学有关。

之后,您向 spacy 管道添加一个新组件,它应该实现以下 2 个:

  1. 将数学标记合并为一个数学标记
  2. 将此标记的数学属性设置为 true

以下代码应该可以解决您的问题:

import spacy
from spacy.tokens import Token
Token.set_extension('math', default=False)
nlp  = spacy.load('en')

def math_expressions(doc):
    flag_start = False
    to_merge = []
    for index, token in enumerate(doc):
        if (token.text == "{"):
            start = index
            flag_start = True
        if (flag_start and token.text == "}"):
            flag_start = False
            to_merge.append(doc[start:index+1])
    for span in to_merge:
        token = span.merge()
        token._.set('math', True)
    return doc


nlp.add_pipe(math_expressions, after='ner')

doc = nlp('Two cyclists {A} and {B}, {120 miles} apart, approach each other, each pedaling at {10 mph}.')
for token in doc:
    if (token._.math):
        print(token)

希望对您有所帮助!