26.6.06

LanguageTool 0.8.3 z obsługą polskiego!

Na stronie www.danielnaber.de/languagetool/ do pobrania jest moduł LanguageTool 0.8.3 z prototypową obsługą języka polskiego.

Instalacja:

  • W programie OpenOffice.org (testowano tylko wersję 2.0)
    • Kliknij polecenie Narzędzia > Menedżer pakietów > Dodaj, a następnie wybierz plik LanguageTool-0.8.3.zip (bez rozpakowywania). Po otwarciu nowego okna edytora OpenOffice.org Writer (naciśnij klawisze Ctrl+N) w menu pojawi się nowe menu LanguageTool, które zawiera polecenie Check text... służące do sprawdzania tekstu.
  • Bez programu OpenOffice.org
    • Rozpakuj archiwum i uruchom plik LanguageToolGui.jar, klikając go dwukrotnie. Jeśli na danym komputerze nie skonfigurowano skojarzenia dla plików *.jar, uruchom program z wiersza poleceń za pomocą polecenia java -jar LanguageToolGUI.jar. Plik LanguageTool.jar jest natomiast korektorem działającym z poziomu wiersza poleceń.
Uwaga. Ta wersja to prototyp; zawiera tylko kilkanaście reguł dla języka polskiego. Niektóre nazwy reguł mają niepoprawne nazwy (posypały się polskie literki), które w następnej wersji zostaną poprawione. Również opis błędu "w oparciu o" jest niegramatyczny, ale to też już poprawiono i w kolejnej wersji tego nie będzie.

25.6.06

Poprawki skryptów

Przeanalizowałem dokładniej skrypty generujące słownik morfologiczny (żeby wprowadzić kodowanie stopnia wyższego). Okazało się, że było sporo usterek. Przede wszystkim niepoprawnie obsługiwane były kombinacje prefiksów i afiksów ze słowników w formacie ispella, a przez to wszystkie formy z negacją miały losowo przydzielone znaczniki. Poza tym w jednym z podstawowych plików pośrednich znajdowało się za mało form źródłowych.
Wprowadziłem następujące zmiany:
  • flagi obecnie są traktowane nie jako ciągi znaków dosłownie, lecz najpierw sortowane (dzięki temu można było zmniejszyć objętość bazy końcówek i prefiksów): flagi w ispellu mogą występować w dowolnej kolejności, więc konkretna kolejność w słowniku nie powinna być brana pod uwagę
  • obsługa prefiksów i sufiksów jednocześnie;
  • rezygnacja z domyślnej obsługi wyrażeń regularnych "\>" i "\<" w skryptach awk: niektóre polskie znaki (np. „ą”) były niepoprawnie interpretowane, w związku z czym zastąpiłem to nieco mniej elegancko wyglądającym, lecz poprawniejszym kodem;
  • ujednolicam flagi w bazie morfologicznej.
Następna wersja, zapewne nadal jeszcze bez przymiotników stopnia wyższego, ale za to z lepiej oznaczonymi regularnymi formami, pojawi się wkrótce (zanim gigantyczne pliki się przemielą, minie pewnie dobrych kilka godzin). Wkrótce nie oznacza „przed upływem tygodnia”. Ręcznie przeglądam wszystkie znaczniki, bo warto je poprawić solidniej.

22.6.06

Kolejna wersja słownika - 0.3

Udostępniłem nową wersję słowników w projekcie Morfologik (do pobrania z tej strony). Zmiany obejmują:
  • oznaczenie przysłówków stopnia wyższego i wprowadzenie jako form podstawowych tych przysłówków stopnia równego, np. „lepiej” -> „dobrze”
  • oznaczenie przysłówków stopnia najwyższego w sposób analogiczny
Uzyskałem to dzięki konsekwentnemu oznaczeniu tych części mowy w słowniku znaczeń tworzonym na stronie kurnik.pl, a następnie ręcznemu odfiltrowaniu drobnych błędów formatowania i literówek.

Analiza flag regularnych form przymiotników stopnia wyższego wskazuje, że w słowniku ispella są one zakodowane tak samo, jak przymiotniki pochodzące od nazw własnych (np. Bachusowy). Pisownia „nie” z oboma rodzajami przymiotników nie jest łączna i w obu wypadkach inna. Oznacza to, że tylko część należy oznaczyć jako adj:comp..., a formy od nazw własnych pominąć (rozpoznawać dzięki wielkiej literze w regule). Postaram się znaczniki stopnia wyższego wprowadzić w kolejnej wersji.

21.6.06

Morfeusz-Java 1.2.1

Jest dostępna nowa wersja Morfeusza (i nowy mostek w Jawie na tej stronie). Zmiany nie są duże — część metod Dawid oznaczył jako deprecated (Morfeusz obsługuje bezpośrednio UTF-8).

13.6.06

Nowe kodowanie reguł

Dotychczasowe kodowanie reguł, jakie zaplanował Daniel Naber w LanguageTool, jest niewystarczające dla języka polskiego z jego zmiennym szykiem. Opracowuję obecnie nową notację i kod w Javie, który ją obsługuje. Wprowadziłem:

  • możliwość użycia wyrażeń regularnych – dla danego elementu tekstu, jego znacznika części mowy lub lematu;
  • zmianę notacji znaczników części mowy (do tej pory musiały być wielkimi literami);
Planuję wprowadzić:
  • możliwość łatwego kodowania negacji (dawniej był to znak ^ z uproszczonej notacji wyrażeń LT; w wyrażeniach regularnych da się zakodować zanegowany ciąg, lecz jest to niezwykle rozwlekłe i ręcznie wręcz niemożliwe);
  • możliwość specyfikowania lematu w treści reguł;
  • przeniesienie sprawdzania, czy fragment reguły jest wrażliwy na wielkość liter, na poziom pojedynczego symbolu tekstu;
  • możliwość określenia maksymalnej liczby symboli do opuszczenia, zanim zostanie znaleziony dany znacznik (do uproszczonej obsługi zmiennego szyku wyrazów).
Najtrudniejsza kwestia wiąże się z lematami, bo będę musiał zmienić kod dla wszystkich obsługiwanych obecnie języków. Całe szczęście, nie jest to takie niemożliwe ;)

7.6.06

Dwa poziomy korekty stylistycznej

Tradycyjne korektory gramatyczne i stylistyczne operują na poziomie pojedynczego zdania (rzadziej: akapitu). Natomiast w polszczyźnie istnieją trzy rodzaje błędów występujących na poziomie nie tylko pojedynczych zdań, akapitów, ale nawet całego tekstu:
  1. powtórzenia wyrazów – błędem są powtórzenia tych samych sformułowań czy wyrazów w sąsiedztwie, ale też nasycenie takimi samymi środkami stylistycznymi całego tekstu jest niewłaściwe;
  2. rymy wewnątrz zdań i akapitów;
  3. za długie zdania, za długie akapity, za długie wyrazy (te też mogą być zbyt trudne do czytania).
Pierwszy rodzaj błędów można wychwycić przez analizę frekwencyjną pojedynczych wyrazów oraz n-tek wyrazów (zapewne najczęściej dwójek i trójek uporządkowanych). Innymi słowy, mogą tu zadziałać standardowe algorytmy wykrywania kolokacji. Jest to hipoteza do sprawdzenia; dokładniej – należałoby sprawdzić, czy zbyt częste powtórzenia jednostki n w małym fragmencie tekstu są widoczne na tle częstości innych jednostek. Zapewne są; test należałoby przeprowadzać, zmieniając stopniowo „okno”, czyli długość testowanego tekstu – od zdania, po zdania sąsiadujące, przez akapit, po cały tekst.

Drugi rodzaj błędów jest nieco niższego poziomu, bo nie liczą się rymy między tytułem a ostatnim wyrazem np. w książce o objętości 200 stron maszynopisu. Dla języka polskiego prawdopodobnie wystarczy sprawdzenie, czy pokrywają się końcówki wyrazów (pokrywanie należy sprawdzać przy użyciu odpowiednio zdefiniowanej relacji podobieństwa fonetycznego). Wstępnie wydaje mi się, że w grę wchodzi podobieństwo co najmniej czterech ostatnich głosek. Nie mogę znaleźć jednak żadnych bardziej formalnych prac na ten temat. Za wszelkie komentarze będę wdzięczny.

Trzeci rodzaj błędów jest wykrywany przez niektóre korektory, a nawet proste makra do Ooo.

5.6.06

I kolejna wersja słownika już jest...

Na stronie projektu znowu są nowe pliki do pobrania: w słowniku wprowadzono więcej anotacji dla wyrazów bez flag ispella (m.in. dokonano anotacji wszystkich przyimków anotowanych w korpusie IPI oraz kilku dodatkowych; uzupełniłem zagubione klasy flag dla wielu czasowników, dodałem nieregularną odmianę czasownika być oraz predykatywy można, trzeba itd.).
W repozytorium SVN zaktualizowałem skrypty.
Do zrobienia pozostaje:
  • uzupełnienie odmian czasowników nieregularnych (na pewno mieć, wszystkie formy są oznaczone tylko jako verb:irreg)
  • uzupełnienie zaimków osobowych (siebie, on, ty; niektórych form w ogóle nie ma)
  • anotowanie stopnia wyższego i najwyższego przysłówków (jest tylko adv; nie da się odróżnić dłużej i długo); brak niektórych form, np. ładniej
  • anotowanie stopnia wyższego i najwyższego przymiotników; być może różnica polega na braku flagi negacji b? (jeśli tak, to trzeba by to hurtem poprawić w bazie morfologicznej).