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 个:
- 将数学标记合并为一个数学标记
- 将此标记的数学属性设置为 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)
希望对您有所帮助!
使用 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 个:
- 将数学标记合并为一个数学标记
- 将此标记的数学属性设置为 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)
希望对您有所帮助!