Das ist härter als es aussieht. (Ich habe hier eine Menge Arbeit geleistet). Das Hauptproblem ist, dass es keinen Standard gibt (ich habe mit NIST an Einheiten gearbeitet, und obwohl sie schließlich eine Auszeichnungssprache erstellt haben, benutzen sie nur wenige). Es ist also wirklich eine Form der Verarbeitung natürlicher Sprache und hat zu behandeln:
- Mehrdeutigkeit (was bedeutet „M“ bedeutet - Meter oder mega)
- inkonsistent Interpunktion
- Abkürzungen
- Symbole (zB " mu“für micro)
- unklar Semantik (zB ist kg/m/s die gleiche wie kg/(m * n)?
Wenn Sie gerade ein Spielsystem zu schaffen, dann sollten Sie Erstellen Sie eine BNF für das System und stellen Sie sicher, dass alle Beispiele daran festhalten. Dies verwendet gängige Interpunktionszeichen ("/", "", "(", ")", "^"). Zeichenfelder können unterschiedliche Länge haben ("m", "kg", "lb"). Algebra auf diesen Strings („kg“ -.> 1000 „g“ hat Probleme als kg eine Grundeinheit ist
Wenn Sie es tun ernst dann ANTLR (@Yaugen) ist nützlich, aber bewusst sein, dass die Einheiten in der Wild wird nicht eine regelmäßige Grammatik aufgrund der Unstimmigkeiten oben.
Wenn Sie wirklich ernst sind (dh bereit, in einem festen Monat setzen), ich interessiert wäre zu wissen. :-)
Mein aktueller Ansatz (der außerhalb des Umfangs Ihrer Frage liegt) besteht darin, eine große Anzahl von Beispielen aus der Literatur automatisch zu sammeln und eine Reihe von Heuristiken zu erstellen.
ANTLR? http://www.antlr.org/wiki/display/ANTLR4/Home –
Vielleicht möchten Sie sich einen ziemlich alten Versuch ansehen, physikalische Größen zu interpretieren, das [Pixelmed UCUM Toolkit] (http://www.dclunie.org). com/pixelmed/software/UCUM /). Das Toolkit verwendet ANTLR. Werfen Sie einen Blick auf den Javadoc für weitere Details. Zu der Vollständigkeit kann ich jedoch nichts sagen. –
Was genau ist dein Ziel hier? Wie meinst du "Parsing"? Meinst du es sollte etwas wie ** 10m/s + 2m/s ** interpretieren und es auf ** 12m/s ** oder vielleicht etwas wie ** m/s * kg * s ** auswerten und zu * auswerten * m * kg **? Auch wenn es manchmal nicht viel klingt, kann es Ihnen helfen, Ihr Ziel zu klären! – MrD