Moje zadanie projektowe polegało na napisaniu programu
który będzie rozwiązywał proste zadania tekstowe z fizyki. Jest
to dosyć złożony problem ze względu na różnorodność takich
zadań. Zadnia które będzie rozwiązywał mój program to
zadania w których mamy dane pewne wielkości fizyczne i na
podstawie tych danych, według jednego ze znanych wzorów
fizycznych należy wyliczyć odpowiedź, czyli wielkość fizyczną
która jest nieznana. W celu wczytania zadania
do programu, każde z nich należy zapisać w pliku tekstowym.
Aby możliwe było rozwiązanie konkretnego zadania trzeba będzie wybrać
dział fizyki którego to zadanie dotyczy oraz podać nazwę pliku z
zadaniem. Jeżeli program będzie potrafił rozwiązać zadanie to wyświetli
rozwiązanie, w postaci symbolu jednostki fizycznej oraz jej wartości
liczbowej i jednostki. W innym przypadku poinformuje nas że jest to
niemożliwe albo że zadanie zawiera błędy w zapisie.
Cały problem rozwiązania zadania tekstowego można z
dekomponować na dwa mniejsze pod problemy. Jeden z nich, trudniejszy,
polega na wyszukaniu w tekscie interesujących nas informacji
niezbędnych do rozwiązania zadnia. Takimi informacjami są, wartości
liczbowe wielkości fizycznych które są danymi w zadaniu oraz co
na podstawie tych wielkości należy wyliczyć.
Drugi pod problem dotyczy wyboru metody wyliczenia rozwiązania naszego
zadania, czyli wyboru odpowiedniego wzoru fizycznego do którego
podstawimy wyekstrahowane wczesnej dane.
Aby rozwiązanie zadania było możliwe zdefiniowałem dla każdej
klasy zadań bazę wiedzy, zapisaną w pliku tekstowym, opisującą te
zadania, na jej podstawie program będzie wyszukiwał w tekscie zadania,
wielkości danych i wielkości szukane, oraz wybierał odpowiedni
wzór fizyczny. Baza zawiera informacje na temat wielkości
fizycznych jakie mogą wystąpić w danej klasie zadań. A także przy
pomocy jakich jednostek fizycznych są opisywane. I najważniejsze, wzory
fizyczne które przedstawiają zależności zachodzące pomiędzy tymi
wielkościami fizycznymi. Oto przykład takiej bazy wiedzy dla
zadań z działu 2 zasady dynamiki:
<WIELKOSCI>
jechal jechala predkosc predkoscia szybkosc szybkoscia predkosci | V
m/s |
droga droge drogi odleglosc odleglosci odcinek trasa trase trasy
przebedzie
przejechal przejechala przelecial kilometrow przejedzie | S [m] |
czas czasu czasie sekund przez ciagu trwalo uplywie | T s |
przyspieszenie przyspiesza przyspieszeniem opoznienie opoznieniem | A
m/s^2 |
masa masie waga wadze wazy | M kg |
sila sile sily | F N |
<JEDNOSTKI>
km/h 0.277777777 km/min 16.6666 km/s 1000 m/h 3600 m/min 60 m/s 1
|
kilometrow 1000 kilometra 1000 kilometry 1000 kilometr 0.0001 km 1000
metr 1 metry 1 metrow 1 metra 1 m 1 |
h 3600 godz 3600 min 60 minut 60 minuty 60 sekund 1 sekundy 1 s 1 |
N 1 kN 1000 |
kg 1 dag 100 g 1000 |
km/h^2 0.0000771604 km/min^2 0.277777777 m/min^2 0.000277777 m/s^2 1 |
<WZORY>
# A = F : M <END>
# F = A * M <END>
# M = F : A <END>
# T = M * V : F <END>
# F = M * V : T <END>
# M = F * T : V <END>
# V = F * T : M <END>
W pierwszej częsci <WIELKOSCI
FIZYCZNE> są wymienione wszystkie słowa kluczowe, oddzielone
spacją, które oznaczają wystąpienie w zadaniu wielkości
fizycznej. Każdy ciąg takich słów kluczowych zakończony jest
znakiem | za którym znajduje się symbol
reprezentujący daną wielkość fizyczną oraz bezpośrednio za nim
jednostka danej wielkości.
W kolejnej części <JEDNOSTKI>
znajdują się jednostki
wielkości fizycznych jakie mogą wystąpić w zadaniu.
Ze względu na to że każda wielkość fizyczna może być opisana za pomocy
różnych jednostek, aby uniknąć błędów w obliczeniach,
program sprowadza wszystkie jednostki do jednostek
podstawowych układu SI, w tym celu w pliku bezpośrednio za jednostkami
znajdują się wartości liczbowe ( mnożniki ). Po zidentyfikowaniu
wartości wielkości fizycznej należy ją przemnożyć przez odpowiedni
mnożnik aby dana wielkość fizyczna była opisana jednostką podstawową
układu SI.
Ostatnia część <WZORY>
bazy wiedzy zawiera wzory które opisują zależności pomiędzy
wielkościami fizycznymi występującymi w danej klasie zadań.
Aby móc poprawnie przetwarzać tekst zadania w celu
wyciągnięcia z niego potrzebnych informacji, zacząłem od poprawnego
jego
wczytania w celu ułatwienia i zapewnienia poprawności jego analizy.
Program wczytuje tekst zadania wyraz po wyrazie (ciągi znaków
nie oddzielone spacją lub innymi znakami białymi ). Należy pamiętać o
tym że na końcu kazdego zdania, znajdują się znaki
interpunkcyjne, które znajdują się bezpośrednio za wyrazem
w
zdaniu. W takich przypadkach program wczytuje wyraz który
wygląda następująco:
Dział |
Ruch
jednostajny prostoliniowy |
Przyspieszenie
w ruchu prostoliniowym |
Druga
zasada dynamiki |
Prąd
elektryczny |
Ogólna
liczba zadań |
17 |
8 |
10 |
15 |
Liczba
rozwiązanych zadań |
8 |
4 |
5 |
7 |