1. ホーム
  2. python

[解決済み] スペイシーでの数学表現

2022-02-17 04:45:05

質問

Pythonとspacy(ドイツ語)を使って数式を含む数学のタスクを分析する:これらの数式にフラグを立てることは可能か?例えば、{}で。

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

今現在({}なし)、AとBは異なるタグ(ドイツ語ではNOUNとX)を持っています。

どのように解決するのですか?

はい、それは絶対に可能です。まず、このトークンが数学と関係があることを示す、新しい「math」属性を定義する必要があります。

その後、スペイシーパイプラインに新しいコンポーネントを追加して、次の2つを実現する必要があります。

  1. 数学トークンを1つの数学トークンに統合する
  2. このトークンに対して、math 属性を 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)

お役に立てれば幸いです。