9

I want to be able to parse expressions representing physical quantities like

g/l
m/s^2
m/s/kg
m/(s*kg)
kg*m*s
°F/(lb*s^2)

and so on. In the simplest way possible. Is it possible to do so using something like Pyparsing (if such a thing exists for Java), or should I use more complex tools like Java CUP?

EDIT: To answere MrD's question the goal is to make conversion between quantities, so for example convert g to kg (this one is simple...), or maybe °F/(kg*s^2) to K/(lb*h^2) supposing h is four hour and lb for pounds

4

1 に答える 1

6

これは見た目より難しいです。(私はここでかなりの量の仕事をしました)。主な問題は、標準がないことです (私はユニットに関して NIST と協力してきましたが、彼らは最終的にマークアップ言語を作成しましたが、それを使用する人はほとんどいません)。したがって、これは実際には自然言語処理の一種であり、次の処理を行う必要があります。

  • あいまいさ (「M」の意味 - メートルまたはメガ)
  • 一貫性のない句読点
  • 略語
  • 記号 (例: マイクロの「mu」)
  • 不明確なセマンティクス (たとえば、kg/m/s は kg/(m*s) と同じですか?

おもちゃのシステムを作成するだけの場合は、システムの BNF を作成し、すべての例がそれに準拠していることを確認する必要があります。これは、一般的な句読点 ("/"、" "、"("、")"、"^") を使用します。文字フィールドは可変長 ("m"、"kg"、"lb") にすることができます。これらの文字列の代数 ("kg" -> 1000 "g" は、kg が基本単位であるため問題があります。

真剣に取り組んでいる場合は、ANTLR (@Yaugen) が役立ちますが、上記の矛盾により、野生のユニットは通常の文法に従わないことに注意してください。

もしあなたが本当に真剣なのであれば (つまり、しっかりとした月を過ごす準備ができているなら)、知りたいです。:-)

私の現在のアプローチ (これは質問の範囲外です) は、文献から多数の例を自動的に収集し、多数のヒューリスティックを作成することです。

于 2013-05-15T12:26:55.897 に答える