Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

analiza wyrazów jednosylabowych do programu komputerowego

444 views
Skip to first unread message

Mikołaj Zielinski

unread,
Aug 14, 2000, 3:00:00 AM8/14/00
to
witam

od kilku miesiecy mecze sie z programem komputerowym, ktory ma na podstawie
analizy wyrazow jednosylabowych rozpoznawac czy dany tekst jest w jezyku
polskim czy angielskim
wypisałem sobie prawie wszystkie wyrazy jednosylabowe polskie - mam ich
3112, policzyłem wszystkie występujące w nich pary i trojki liter
doszedłem juz do takich wnioskow, ze np. na "i", "ó" nie konczą sie wyrazy,
"s" jesli wystepuje to najczesciej na poczatku wyrazu; jesli wystapi "cz" to
najczesciej na koncu wyrazu a poprzedzone bedzie literka "z", itd

teraz próbuję znaleźć w tym wszystkim jakieś reguły, które pomogłyby mi
stworzyć program ale nic nie widzę
potrzebuje rady kogos kto zna sie na slowotworstwie i potrafi ujac to
wszystko w bardziej ogolny sposob np. rozwazajac gloski dzwieczne i
bezdzwieczne albo jakos tak poniewaz mi wyszlo to zbyt szczegolowo i za duzo
mam tych "regul"

mikolaj zielinski (student informatyki)

Robert Razniewski

unread,
Aug 14, 2000, 3:00:00 AM8/14/00
to
"Mikołaj Zielinski" wrote:

Nie jestem językoznawcą, jestem informatykiem. Obawiam się, że nie znajdziesz
reguł na tyle ogólnych i niezawodnych, żeby program stwierdził na 100%, że tekst
jest, dajmy na to, po polsku. Weź kilka reguł, które już opracowałeś i przypisz
im jakieś wagi, np.:

reguła 1 (że literka x zawsze występuje przed literką y) 23 punkty
reguła 2 (że coś tam) 16 punktów

Ocena punktowa reguł arbitralna.

Teraz zastosuj reguły do kilku-kilkunastu próbnych tekstów. Posumuj wyniki
punktowe zastosowania reguł. Zobacz ile punktów wychodzi ci dla polskich tekstów
(wyrocznią, czy tekst jest polski, na razie będziesz ty sam), ale ile dla
obcych. Wyznacz granicę, poniżej której tekst jest definitywnie nie-polski. To
jest coś na kształ uczenia sieci neuronowej. Możliwe, że będziesz musiał trochę
powalczyć z wagami poszczególnych reguł.

Swoją drogą - ciekawy problem.

rr


Ryszard Cichy

unread,
Aug 15, 2000, 2:43:04 AM8/15/00
to

Użytkownik Robert Razniewski <gus...@inet.com.pl> w wiadomości do grup
dyskusyjnych napisał:39984A3E...@inet.com.pl...

> "Mikołaj Zielinski" wrote:
>
> > teraz próbuję znaleźć w tym wszystkim jakieś reguły, które pomogłyby mi
> > stworzyć program ale nic nie widzę
> > potrzebuje rady kogos kto zna sie na slowotworstwie i potrafi ujac to
> > wszystko w bardziej ogolny sposob np. rozwazajac gloski dzwieczne i
> > bezdzwieczne albo jakos tak poniewaz mi wyszlo to zbyt szczegolowo i za
duzo
> > mam tych "regul"
Nie szukaj reguł na czuja. Nie traktuj słów znaczeniowo, ani fonetycznie,
ale jako ciągi elementów (znaków) Trzeba by kombinować z krosskorelacją
wielowymiarową. Zgłoś się na pl.comp.programming, tam Cię zarzucą pomysłami.
Jest wielu specjalistów od analizy języka. Oni zajmują się językami
formalnymi, ale metody mogą być dobre do języka naturalnego. W każdym razie
hasło do szukania w sieci powinno być bliskie "digital signal processing
(DSP)" i może jakaś analiza procesów dyskretnych.
Ryszard Cichy


Adamus

unread,
Aug 15, 2000, 3:00:00 AM8/15/00
to

Mikołaj Zielinski napisał(a) w wiadomości: ...

>3112, policzyłem wszystkie występujące w nich pary i trojki liter
>doszedłem juz do takich wnioskow, ze np. na "i", "ó" nie konczą sie wyrazy,

A to ciekawe. A co z takimi wyrazami jak "mdli", "szli", "tli", "kpi" itd...

-----------------------
Pozdrawiam,
Adam B.


Mikołaj Zielinski

unread,
Aug 15, 2000, 3:00:00 AM8/15/00
to
dziekuje za odpowiedz

nie spodziewalem sie, ze trafie tutaj na informatykow dla tego nie wnikalem
w szczegoly techniczne
ale w tej sytuacji dodam, ze program pisze w oparciu o tzw. skonczone sieci
przejscia, ktore zwykle stosuje sie do rozpoznawania i generowania jezyka

luki tej sieci beda oznaczaly grupy liter np.
SPOLGLOSKA2 oznacza: m, n, t
SAMOGLOSKA1 oznacza: a, ą, e, ę, i, o, u, y
taka siec bedzie rozpoznawac nastepujace wyrazy: ma, mą, me, ..., na, ną,...
niektore z nich sa bez sensu (tzn. nie istnieja w jezyku polskim) ale to nie
przeszkadza bo ta siec ma rozpoznawac a nie generowac, czyli jesli w danym
tekscie wystapia wyrazy np. ma, na, to, tu - wtedy siec ta przebiegajac po
tych dwoch lukach stwierdzi, ze takie wyrazy sa ok

problem w tym, ze jesli dziele litery tylko na samogloski i spolgloski to
dla wyrazow np. czteroliterowych w grupie SPOLGLOSKAX mam prawie wszystkie
spolgloski, ale tak jest zle bo wtedy siec rozpoznaje wszystkie mozliwe
czteroliterowe kombinacje liter wiec nie rozpozna czy tekst jest polski czy
np. napisany w suahili.

w powyzszym przykladzie sa tylko 3 spolgloski i ten fragment sieci mialby
rozpoznawac dwuliterowe jednosylabowe wyrazy polskie zaczynajace sie na
spolgloske ale pozostaly w tej grupie jeszcze 22 wyrazy, ktore zaczynaja sie
na inne spolgloski np. "po" ale problem w tym, że gdybym dodał "p" do grupy
SPOLGLOSKA2 to siec moja rozpoznawalaby wtedy jeszcze, zupelnie
niepotrzebnie takie wyrazy jak: pa, pą, pe, pę, pi, pu, py

to taki przyklad ilustrujacy problem, ktory w przypadku wyrazow cztero-,
pieciowyrazowych powoduje, ze program bedzie rozpoznawal wszystkie jezyki
oparte na alfabecie lacinskim (a to nie bedzie to czego chcialem) ale
wyobrazam sobie, ze gdybym znal jakies zasady slowotworcze to moze moglbym
to podzielic na mniejsze grupy


mz

Użytkownik Mikołaj Zielinski <k...@venus.wmid.amu.edu.pl> w wiadomości do grup
dyskusyjnych napisał:DUWl5.19945$FO3.4...@news.tpnet.pl...


> witam
>
> od kilku miesiecy mecze sie z programem komputerowym, ktory ma na
podstawie
> analizy wyrazow jednosylabowych rozpoznawac czy dany tekst jest w jezyku
> polskim czy angielskim
> wypisałem sobie prawie wszystkie wyrazy jednosylabowe polskie - mam ich

> 3112, policzyłem wszystkie występujące w nich pary i trojki liter
> doszedłem juz do takich wnioskow, ze np. na "i", "ó" nie konczą sie
wyrazy,

> "s" jesli wystepuje to najczesciej na poczatku wyrazu; jesli wystapi "cz"
to
> najczesciej na koncu wyrazu a poprzedzone bedzie literka "z", itd
>

> teraz próbuję znaleźć w tym wszystkim jakieś reguły, które pomogłyby mi
> stworzyć program ale nic nie widzę
> potrzebuje rady kogos kto zna sie na slowotworstwie i potrafi ujac to
> wszystko w bardziej ogolny sposob np. rozwazajac gloski dzwieczne i
> bezdzwieczne albo jakos tak poniewaz mi wyszlo to zbyt szczegolowo i za
duzo
> mam tych "regul"
>

> mikolaj zielinski (student informatyki)
>
>

Radek Zakrzewski

unread,
Aug 15, 2000, 3:00:00 AM8/15/00
to

Mikołaj Zielinski <k...@venus.wmid.amu.edu.pl> wrote in message
news:DUWl5.19945$FO3.4...@news.tpnet.pl...
...

> doszedłem juz do takich wnioskow, ze np. na "i", "ó" nie konczą sie
wyrazy,

Jak najbardziej kończą sie na "i":
ci, fi, hi, ii, ki, li, mi, ni, pi, si

A to tylko dwuliterówki - kilka dłuższych przykładow to:
ćmi, cli, tli, gzi, mdli, szkli, śni, śpi, grzmi, brzmi, szli, pchli, źli,
psi, ckni, wsi, płci, itd...

> "s" jesli wystepuje to najaczesciej na poczatku wyrazu; jesli wystapi "cz"


to
> najczesciej na koncu wyrazu a poprzedzone bedzie literka "z", itd
>
> teraz próbuję znaleźć w tym wszystkim jakieś reguły, które pomogłyby mi
> stworzyć program ale nic nie widzę

Tak na oko trudno Ci(!) pewno będzie takie reguły zauważyć - tym
bardziej że niektóre kombinacje liter są i w polskim i w angielskim, np.:
pat, bat, chat, mat, rat,
bar, car, far, gar, mar, par, tar, war,
cap, gap, map, pap,
gad, lad, pad, sad, wad,
fan, pan, ran, tan,
dal, gal, pal,
lot, pot, rot,
garb, grab, gnat, brat, list, most,
plan, port, park, front, fort, tort, form, farm, flag, lamp, ramp, ...
itd... etc...

Jak widzisz, stuprocentowa klasyfikacja słów na podstawie ich wyglądu jest
raczej beznadziejna...

Dwa podejścia się nasuwają:
(A) Metoda brutalna - stworzyć listę wszystkich polskich wyrazów
jednosylabowych (wygląda na to, że jeszcze ich nie masz wszystkich - samych
trójliterówek jest co najmniej 1338 (wg. http://www.pfs.org.pl/) więc
podejrzewam, że wyrazów jednosylabowych będzie ciut więcej niż 3112. Potem
lecisz przez inkryminowany tekst i sprawdzasz wszystkie napotkane wyrazy
jednosylabowe czy są na Twojej liście. Procent tych co są jest wskażnikiem
Twojej pewności, że tekst jest po polsku. Metoda ta jest w miarę niewrażliwa
na dziury w Twojej liście i na wyrazy "wielojęzyczne" - co najwyżej zamiast
99% będziesz miał pewność 92% albo 89%.

(B) Metoda "elegancka" - wziąć jakiś "inteligentny" algorytm "uczący" się i
wytrenować go na wielu próbkach tekstów polskich i angielskich. Rozpoznawacz
może być np. kosmaty (fuzzy ;-)), nerwowy (neural) albo coś w tym guście.
Mały problem tutaj to reprezentacja wyrazów tak aby udało mu się nauczyć
rozpoznawać wyrazy - czyli znaleźć te reguły, których sam nie widzisz. Może
to być trudne. No i Twój algorytm ma działać na całym tekście a nie na
pojedynczych słowach - odpowiednie powiązanie rozpoznawania słów z diagnozą
na temat całego tekstu może być nieoczywiste.

Osobiście uważam, że metody brutalne prawie zawsze sprawdzają się lepiej -
możesz też spróbować jakiejś kombinacji dwóch podejść (np. wartość średnia z
kosmatego rozpoznawacza pojedynczych słów).

Powodzenia,

Radek

Radek Zakrzewski

unread,
Aug 15, 2000, 3:00:00 AM8/15/00
to

Mikołaj Zielinski <k...@venus.wmid.amu.edu.pl> wrote in message
news:I79m5.21038$FO3.5...@news.tpnet.pl...
> dziekuje za odpowiedz
> ...
...ciach, ciach, ciach...

>
> >
> to taki przyklad ilustrujacy problem, ktory w przypadku wyrazow cztero-,
> pieciowyrazowych powoduje, ze program bedzie rozpoznawal wszystkie jezyki
> coparte na alfabecie lacinskim (a to nie bedzie to czego chcialem) ale

> wyobrazam sobie, ze gdybym znal jakies zasady slowotworcze to moze moglbym
> to podzielic na mniejsze grupy
>
>

Ha! Czyli masz zadaną z góry metodę rozpoznawania wyrazów, na podstawie ich
wyglądu niestety....

Jak już żeśmy ustalili, 100% dokładności nie będzie, czyli rozpoznawanie
będzie albo trójwartościowe (A, P, albo "nie wiem"), albo też
statystyczno/rozmyto/zgrubne (tfu - straszny wyraz...).

W dalszym ciągu sugeruję metodę brutalną. Zamiast gapić się godzinami w
listę 3112 słów i starać się odnależć jakieś reguły lepiej zaprząc do tego
komputer. Kombinacji dwuliterowych masz raptem 32*32, trójliterowych
32*32*32, itd. Sprawdzić jak często która z nich występuje w owej liście
3112 słow polskich, a jak często w liście angielskiej (musisz sobie taką też
wygenerować) nie powinno być trudno. Idąc dalej tym tropem możesz dodać
pozycję owych kombinacji w słowie, kategorie głosek (dźwięczne/bezdżwięczne
itp.), itd. Niech się komputer sam nauczy które reguły mają największą siłę
predykcyjną. Algorytm genetyczny np. może się nadać do budowy Twojego
drzewka - co prawda będzie chodził parę miesięcy zanim dojdzie do jakichś
sensownych wniosków ale i tak już od kilku miesięcy się męczysz, więc niech
się teraz maszyna pomęczy...;-).

Radek

> mz

ktabaczynski

unread,
Aug 16, 2000, 3:00:00 AM8/16/00
to

Mikołaj Zielinski napisał(a) w wiadomości: ...
>witam
>
>od kilku miesiecy mecze sie z programem komputerowym, ktory ma na podstawie
>analizy wyrazow jednosylabowych rozpoznawac czy dany tekst jest w jezyku
>polskim czy angielskim
>wypisałem sobie prawie wszystkie wyrazy jednosylabowe polskie - mam ich
>3112, policzyłem wszystkie występujące w nich pary i trojki liter
>doszedłem juz do takich wnioskow, ze np. na "i", "ó" nie konczą sie wyrazy,
>"s" jesli wystepuje to najczesciej na poczatku wyrazu; jesli wystapi "cz"

to
>najczesciej na koncu wyrazu a poprzedzone bedzie literka "z", itd
>
>teraz próbuję znaleźć w tym wszystkim jakieś reguły, które pomogłyby mi
>stworzyć program ale nic nie widzę
>potrzebuje rady kogos kto zna sie na slowotworstwie i potrafi ujac to
>wszystko w bardziej ogolny sposob np. rozwazajac gloski dzwieczne i
>bezdzwieczne albo jakos tak poniewaz mi wyszlo to zbyt szczegolowo i za
duzo
>mam tych "regul"
>
>mikolaj zielinski (student informatyki)
>
>

Cześć!

Wydaje mi się, że idealnym wręcz narzędziem
może być sieć neuronowa i to bardzo prosta.
Poszukaj książek Ryszarda Tadeusiewicza.

Jak chcesz więcej informacji to napisz na priv.

Pozdrowienia. Krzysztof.


0 new messages