2

私は、病理学者が電子記録に診断を書き込んだ小さな解析プロジェクト*を持っています。それらの大部分は「GLEASON SCORE: 3+4=7」という形式を使用していますが、これには多くのリフがあります。対処方法がよくわからないのは、「GLEASON SCORE: 7=3+4」です。

これまでの私の文法は、

gleason = Group("GLEASON" + Optional("SCORE") + Optional("GRADE") + Optional("PATTERN") + Optional(":") + num("left") + "+" + num("right") + Optional("=") + Optional("total"))

追加してみました

... + Optional(":") + Optional(num("total")) + Optional("=") + ...

「左」変数の前ですが、すべてのレコードではなく、欠落しているレコードのみが見つかりました。パターン A (a+b=c) またはパターン B (c=a+b) を検索する必要があります。どうすればパイパーシングでそれを行うことができますか?


4

2 に答える 2

3

num と '+' を使用して独自の算術式をローリングする代わりに、pyparsingを使用operatorPrecedenceして 4 つの関数の算術式を簡単に定義します。

arith_expr = operatorPrecedence(num,
    [
    (oneOf('-'), 1, opAssoc.RIGHT),
    (oneOf('* /'), 2, opAssoc.LEFT),
    (oneOf('+ -'), 2, opAssoc.LEFT),
    ])

次に、次のものに置き換えnum("left") + "+" + num("right") + Optional("=") + Optional(num)("total")ます。

arith_expr('lhs') + Optional('=' + arith_expr('rhs'))

これで、「x+y=z」タイプの式だけでなく、ネストされた括弧を含むあらゆる算術式を解析できるようになります。

于 2012-09-26T06:14:04.347 に答える
2
>>> eqn = Word(alphas,exact=1)+"+"+Word(alphas,exact=1)+"="+Word(alphas,exact=1)

>>> eqn2 = Word(alphas,exact=1)+"="+Word(alphas,exact=1)+"+"+Word(alphas,exact=1
)
>>> equation = eqn|eqn2
>>> equation.parseString("A+b=c")
(['A', '+', 'b', '=', 'c'], {})
>>> equation.parseString("A=b+c")
(['A', '=', 'b', '+', 'c'], {})
>>> equation.parseString("A=b-c")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Python26\lib\site-packages\pyparsing.py", line 1032, in parseString
    raise exc
pyparsing.ParseException: Expected "+" (at char 3), (line:1, col:4)
于 2012-09-26T05:57:13.437 に答える