Pracuję nad małym projektem Haskella, który musi być w stanie bardzo niewielkim podzbiorem ściśle uformowanego języka angielskiego na tokeny do semantycznego parsowania. Jest to bardzo naiwny interfejs języka naturalnego do systemu z wieloma różnymi efektorami końcowymi niż polecenia wydawane. Obecnie używam do tego Alexa, ale Alex polega na tym, że jego słownik jest statycznie skompilowany. Natura systemu jest taka, że liczba i nawet rodzaj efektorów końcowych na świecie może wzrastać i maleć po kompilacji, więc muszę mieć możliwość dodawania lub usuwania żywotnych tokenów z leksykonu w czasie wykonywania.Czy istnieją jakieś gotowe rozwiązania do analizy leksykalnej w Haskell, które pozwalają na stosowanie dynamicznego leksykonu w czasie wykonywania?
Próbowałem rozglądać się za dynamicznych rozwiązań Lexing, a najbliżej mogę dostać było this Dynamiczny Lexer silnik, który nie wygląda na zostały zaktualizowane od 2000.
byłem rozważa kilka technik, takich jak używając podejścia mniej wysokiego poziomu (być może Attoparsec), a nawet podłączając rekombinację Alexa i oddzielając lexera od reszty aplikacji.
Czy są jakieś dobrze znane rozwiązania tego rodzaju analizy leksykalnej? Zamierzam w końcu przejść przez Natural Language Processing for the Working Programmer, więc mogę przyjąć mniej uproszczone podejście, ale obecnie zasadniczo potrzebuję leksykonu.
Ile problemu stanowi wydajność? Mogę sobie wyobrazić bardzo proste rozwiązania, w zależności od tego, czy potrzebujesz dużej wydajności, czy nie. – sclv
@sclv Wydajność musi być bliska czasie rzeczywistym (w sensie responsywności, a nie determinizmu). –
Ten dynamiczny silnik Lexer nie jest automatycznie zły tylko dlatego, że nie był aktualizowany od dłuższego czasu. Może to już jest doskonałe i nie trzeba go aktualizować. :) –