ápr
23

Nyelvi parser

Címkék: f# nyelvi parser | Szerző: sync | 7:19 pm

Chris Smith blogja ihletett meg egy nyelvi parser megírására. Már régen izgatott, hogy miképp lehetne normális emberi nyelven megírni egy kérdést, amire a program értelmes választ is ad. Nem egyszerű dolog, de az F# csodákra képes. Néhány óra alatt persze, nem lehet tökéletest alkotni, de azért elégedett vagyok az eredménnyel. A lényeg, hogy azokat a szavakat felveszem tokenként, amelyek ennek a kis folyó-adatbázisnak a lekérdezésére lehet használni : ("Melyik", "folyó", "hosszabb/rovidebb", "mint", "a" 'valamelyik folyó').

Ezekből a tokenekből az fslex segédprogram egy parsert generál. Ami talán érdekes - nem találtam rá példát - hogyan lehet egy tetszőleges folyónevet megadni. A mellékelt forrásban* megtalálható a válasz.

A folyó adatbázisom :

 

let rivers = [("Nilus", 6690);("Mississipi", 6200);("Jangce", 5800);("Duna",2842);("Amur", 5780);("Don", 1870);("Amazonas", 6500);]

 

 

Ilyen jellegű a kérdésekre tudok válaszolni:

  "Melyik folyo hosszabb mint az Amazonas "
 "Melyik folyo rovidebb mint a Duna "

 

>Nilus(6690) hosszab mint a(z) Amazonas(6500)

>Don(1870) rvidebb mint a(z) Duna(2842)

A kérdések tovább bővíthetők. A mintaillesztős az F# erőssége. A match használata teszi lehetővé, hogy ennyire tömör legyen a kód.

*A mellékelt F# projekt nálam néha működött, néha nem. Az F# interpreter néha megbolondul. Garanciát nem tudok adni.

 

A bejegyzés trackback címe:

https://fsharpmagyarul.blog.hu/api/trackback/id/tr1001082569

Kommentek:

A hozzászólások a vonatkozó jogszabályok  értelmében felhasználói tartalomnak minősülnek, értük a szolgáltatás technikai  üzemeltetője semmilyen felelősséget nem vállal, azokat nem ellenőrzi. Kifogás esetén forduljon a blog szerkesztőjéhez. Részletek a  Felhasználási feltételekben és az adatvédelmi tájékoztatóban.

Nincsenek hozzászólások.
süti beállítások módosítása