12.5.07

Plany i aktualne prace

W aktualnie opracowywanej wersji LanguageTool (0.9) wprowadzamy wiele nowych możliwości. Jedną z najważniejszych – dla Polaków – będą lepsze podpowiedzi. Jeśli na przykład błędnie użyty zostanie jakiś czasownik w utartym zwrocie frazeologicznym, reguła może tworzyć podpowiedź zawierającą prawidłowy czasownik w odpowiedniej formie gramatycznej. Weźmy błędne zdanie:

Pełni naprawdę istotną rolę w żegludze różnych typów statków

Program obecnie podpowiada następujące poprawki:

  • Pełni naprawdę istotną funkcję
  • Odgrywa naprawdę istotną rolę
I można dzięki temu szybko poprawić błędne zdanie. To samo dotyczy innych części mowy, co widać na stronie z listą wykrywanych przez reguły błędów, gdzie udokumentowałem większość podpowiedzi tworzonych przez reguły LanguageTool dla polszczyzny. Piszę „większość”, bo jest jeszcze garść reguł, nad którymi muszę popracować.
Problem pojawia się bowiem w razie poprawki wymagającej zmiany przypadka. Gdy wiadomo, że chodzi o jeden rzeczownik, sprawa jest banalna. Gdy rzeczownik jest zawsze poprzedzony tylko przymiotnikiem, jest podobnie. Sęk w tym, że grupy nominalne w polszczyźnie dosyć trudno ująć prostą regułą. Prawdopodobnie konieczne będzie wprowadzenie specjalnych reguł znakujących grupy nominalne w segmentatorze (ang. chunker) opracowującym tekst oznakowany już znacznikami części mowy i znacznikami strukturalnymi (początek i koniec zdania, koniec akapitu). Napisanie tych reguł nie będzie łatwe z kilku powodów; nie tylko idzie o trudność formalnego ujęcia grupy nominalnej – ale i o fakt, że związek zgody nie zawsze w błędnie napisanym tekście świadczy o istnieniu grupy nominalnej. W językach bez przedimków i rodzajników uchwycenie tych grup jest niestety trudniejsze, więc będę musiał zadowolić się heurystyką. Zostawiam sobie to na wersję 1.x, ale „oprzyrządowanie” praktycznie już istnieje, gdyż na potrzeby Agnes Souque, opracowującej reguły francuskie, napisałem klasę dezambiguatora, która wykorzystuje pliki reguł dezambiguacji bardzo zbliżone do plików reguł błędów. Rozbudowanie tej klasy o możliwość znakowania wyrażeń złożonych jest stosunkowo łatwe i będzie wymagać dopisania kilku linijek kodu w Javie.
Bardziej ambitne plany wiążą się z wykorzystaniem słownika synonimów. O cóż chodzi? Niektóre błędy gramatyczne i stylistyczne są wykrywalne tylko przy wykorzystaniu pewnego zasobu wiedzy semantycznej, a nie tylko regularności czysto syntaktycznych. Chociażby zasada mówiąca, iż wyrażenia „przy pomocy” należy używać tylko w odniesieniu do osób, a nie rzeczy, wymaga kategoryzacji wyrazów na oznaczające rzeczy i osoby (albo przynajmniej osoby i nie-osoby). Podobnie wyrażenie „za pomocą” z pewnością nie może być używane (normalnie, czyli nieironicznie) w odniesieniu do osób. Tego rodzaju prawidłowości występują w wielu językach. Dobrze się składa, że bynajmniej program korygujący błędy nie musi zawierać pełnej wiedzy o świecie, na podstawie mógłby wnioskować o kategorii przedmiotów denotowanych przez wyrazy. Do tego celu wystarczy sieć semantyczna, a przykładem takiej (nieco chałupniczo robionej) sieci jest właśnie tworzony w sposób otwarty słownik synonimów. Wystarczy zatem ze słownika synonimów wydobyć niektóre informacje o przyporządkowaniu wyrazów do pewnych „grubych” kategorii (np. kategorii „osoba, podmiot”). Oczywiście, zdecydowanie lepsze wyniki uzyskać by można z WordNetu dla angielszczyzny. Tak czy inaczej planuję wprowadzenie tagera „semantycznego” (w takim skromnym sensie) – znakującego wyrazy pewnymi cechami kategoryzacyjnymi. Technicznie wiele to nie będzie wymagać, a może ułatwić wyłapywanie trudnych do uchwycenia innych błędów.

2 komentarze:

Anonimowy pisze...

Ciekawe jest że jedna z pierwszych wersji "LanguageTool" jeszcze w Pythonie posiadała "chunking".
Jest to dobrze opisane w pracy magisterskiej autora. W wersji w javie on z tego zrezygnował.
Nawet napisałem list do autora z zapytaniem o to ale niestety sourceforge tak dobrze filtruje spamy, że listy zawsze wracają bez odpowiedzi.

Swoją drogą w morfologik wyraz "kota" wraca z tag "subst:sg:nom:f".
Czy takie błędy są częste? Wygląda na to, że tagger operował na założeniach statystycznych.
W moim programie "Esperantilo". www.esperantilo.org generuję polską fleksje ze słownika.
Program tłymaczy z esperanto na polki.
Może opłacało by się cześć bazy morfologika wygenerować.

Kontakt
mail (małpa) xdobry (punkt) de
Artur Trzewik

Anonimowy pisze...

wydaje mi sie, że jeśli chodzi o słowniki to jedynym poprawnie działającym mógłby się okazać
slownik. To innowacyjne podejście do współczesnosci, translator ten potrafi tłumaczyć zdania w ponad 21 językach świata. Strona jest bardzo przejrzysta, łatwa w obsłudze w dodatku skrypt tłumaczy tekst w ciagu kilku sekund.