Thread View: pl.comp.lang.perl
18 messages
18 total messages
Started by Sync
Thu, 16 Jul 2009 17:34
Sprawdzanie elementow tablicy - zagmatwane
Author: Sync
Date: Thu, 16 Jul 2009 17:34
Date: Thu, 16 Jul 2009 17:34
39 lines
1935 bytes
1935 bytes
Witam,
Mecze sie juz pol dnia z ponizszym problemem i blagam Was o pomoc!
Mam taka oto przykladowa liste produktow zapisana jako anonimowe hasze w
tablicy:
@produkty = (
{ produkt => "Monitor Acer x543 Bialy", cena = "1000" },
{ produkt => "Monitor Acer x543 Niebieski", cena = "950" },
{ produkt => "Dysk Twardy Seagate 250GB", cena = "150" },
{ produkt => "Dysk Twardy Seagate 500GB", cena = "350" },
);
Chce przefiltrowac te tablice w taki sposob, azeby pozostaly w niej
produkty wylacznie *mocno rozniace sie* od siebie nazwa. Do tego celu
uzyje modulu Text::LevenshteinXS
I tak na przyklad ustale, ze dystans Levenshteina musi wynosic ponad 30,
aby nazwa produktu zostala uznana za wystarczajaco rozna.
Obierajac dosc wysoki wskaznik dystansu, chce zeby w mojej powyzszej
tablicy pozostaly jedynie produkty:
Monitor Acer x543 Bialy
Dysk Twardy Seagate 250GB
poniewaz Monitor Acer x543 Niebieski i Dysk Twardy Seagate 500GB zbyt
malo roznia sie od tych pozostajacych w tablicy.
Probowalem uzyc modulu Quantum::Superpositions, ktory dobrze sprawdzal
sie przy porownywaniu tablic, ale nie potrafie go zastosowac w
polaczeniu z obliczaniem dystansu.
Bardzo prosze o wszelkie sugestie jak tego dokonac. Uff, i z gory dzieki!
Re: Sprawdzanie elementow tablicy - zagmatwane
Author: Szymon Sokół
Date: Thu, 16 Jul 2009 18:00
Date: Thu, 16 Jul 2009 18:00
42 lines
2946 bytes
2946 bytes
On Thu, 16 Jul 2009 19:34:39 +0200, Sync wrote:
> @produkty = (
>
> { produkt => "Monitor Acer x543 Bialy", cena = "1000" },
Uwaga drobna: czy widzisz błąd składniowy powyżej?
> Obierajac dosc wysoki wskaznik dystansu, chce zeby w mojej powyzszej
> tablicy pozostaly jedynie produkty:
>
> Monitor Acer x543 Bialy
> Dysk Twardy Seagate 250GB
>
> poniewaz Monitor Acer x543 Niebieski i Dysk Twardy Seagate 500GB zbyt
> malo roznia sie od tych pozostajacych w tablicy.
Uwaga zasadnicza nr 1: a dlaczego akurat dysk 250 i biały monitor zostają, a
nie dysk 500 i niebieski monitor? Bo były wcześniej alfabetycznie, czy jest
jakiś inny powód?
Uwaga zasadnicza nr 2: zdajesz sobie sprawę, że w zależności od odpowiedzi
na powyższe pytanie może się okazać, że dostajesz drastycznie różne wyniki w
zależności od sposobu posortowania danych wejściowych? I nie chodzi mi tu
tylko o to, że z N podobnych rekordów pozostanie ten jeden lub inny jeden -
może się zdarzyć tak, że zostanie inna liczba, np. jeśli masz rekordy A,B,C,
przy czym A i C są wystarczająco odległe od siebie, ale B jest blisko
zarówno A, jak C, to może wyjść tak, że zostanie tylko B, a może tak, że
zostaną A i C.
> Probowalem uzyc modulu Quantum::Superpositions, ktory dobrze sprawdzal
> sie przy porownywaniu tablic, ale nie potrafie go zastosowac w
> polaczeniu z obliczaniem dystansu.
Uwaga zasadnicza nr 3: to, że dany moduł się do czegoś nadaje, nie oznacza,
że nadaje się również do czegoś zupełnie innego.
--
Szymon Sokół (SS316-RIPE) -- Network Manager B
Computer Center, AGH - University of Science and Technology, Cracow, Poland O
http://home.agh.edu.pl/szymon/ PGP key id: RSA: 0x2ABE016B, DSS: 0xF9289982 F
Free speech includes the right not to listen, if not interested -- Heinlein H
Re: Sprawdzanie elementow tablicy - zagmatwane
Author: Sync
Date: Thu, 16 Jul 2009 19:08
Date: Thu, 16 Jul 2009 19:08
69 lines
3622 bytes
3622 bytes
Szymon Sokół wrote:
> On Thu, 16 Jul 2009 19:34:39 +0200, Sync wrote:
>
>> @produkty = (
>>
>> { produkt => "Monitor Acer x543 Bialy", cena = "1000" },
>
> Uwaga drobna: czy widzisz błąd składniowy powyżej?
Oczywiscie, pisalem to napredce w kliencie. Sorki za moj blad. Mam
jednak nadzieje, ze zrozumieliscie o co chodzi.
>
>> Obierajac dosc wysoki wskaznik dystansu, chce zeby w mojej powyzszej
>> tablicy pozostaly jedynie produkty:
>>
>> Monitor Acer x543 Bialy
>> Dysk Twardy Seagate 250GB
>>
>> poniewaz Monitor Acer x543 Niebieski i Dysk Twardy Seagate 500GB zbyt
>> malo roznia sie od tych pozostajacych w tablicy.
>
> Uwaga zasadnicza nr 1: a dlaczego akurat dysk 250 i biały monitor zostają, a
> nie dysk 500 i niebieski monitor? Bo były wcześniej alfabetycznie, czy jest
> jakiś inny powód?
Zostaja, poniewaz pojawily sie jako pierwsze alfabetycznie, lub z
dowolnego innego powodu. Tj. jesli w tablicy pozostanie produkt o danej
nazwie, to chce, aby pozniej pojawiajace sie produkty o podobnej nazwie
byly odfiltrowywane. I nie ma znaczenia kolejnosc ich pojawiania sie.
> Uwaga zasadnicza nr 2: zdajesz sobie sprawę, że w zależności od odpowiedzi
> na powyższe pytanie może się okazać, że dostajesz drastycznie różne wyniki w
> zależności od sposobu posortowania danych wejściowych? I nie chodzi mi tu
> tylko o to, że z N podobnych rekordów pozostanie ten jeden lub inny jeden -
> może się zdarzyć tak, że zostanie inna liczba, np. jeśli masz rekordy A,B,C,
> przy czym A i C są wystarczająco odległe od siebie, ale B jest blisko
> zarówno A, jak C, to może wyjść tak, że zostanie tylko B, a może tak, że
> zostaną A i C.
Nie potrafie wyobrazic sobie takiej sytuacji. Bo na przyklad nastepujace
produkty A,B,C:
A) Monitor Acer CX544
B) Monitor Acer GX540
C) Dysk twardy Seagate 500GB Barracuda
sa jednakowoz od siebie odlegle, niezaleznie od tego ile z tych
produktow do siebie porownasz, tj. niezaleznie od tego ile w bazie
pozostanie.
A zatem, jezeli usuniesz A, to B i C nadal sa tak samo od siebie
odlegle. Jezeli usuniesz B to A i C nadal sa tak samo od siebie odlegle.
I jezeli usuniesz C to A i B nadal sa od siebie tak samo odlegle.
Ja po prostu chce zadac dodatkowe kryterium, np. jezeli odleglosc danego
rekordu jest < 50 od kolejnego rekordu to nalezy usunac ten kolejny rekord.
Chyba, ze gdzies w tym zalozeniu tkwi blad?
>> Probowalem uzyc modulu Quantum::Superpositions, ktory dobrze sprawdzal
>> sie przy porownywaniu tablic, ale nie potrafie go zastosowac w
>> polaczeniu z obliczaniem dystansu.
>
> Uwaga zasadnicza nr 3: to, że dany moduł się do czegoś nadaje, nie oznacza,
> że nadaje się również do czegoś zupełnie innego.
Zgoda. Stad moje pytanie.
Re: Sprawdzanie elementow tablicy - zagmatwane
Author: Szymon Sokół
Date: Thu, 16 Jul 2009 19:29
Date: Thu, 16 Jul 2009 19:29
30 lines
2576 bytes
2576 bytes
On Thu, 16 Jul 2009 21:08:21 +0200, Sync wrote: > Nie potrafie wyobrazic sobie takiej sytuacji. Bo na przyklad nastepujace > produkty A,B,C: > > A) Monitor Acer CX544 > B) Monitor Acer GX540 > C) Dysk twardy Seagate 500GB Barracuda > > sa jednakowoz od siebie odlegle, niezaleznie od tego ile z tych > produktow do siebie porownasz, tj. niezaleznie od tego ile w bazie > pozostanie. > > A zatem, jezeli usuniesz A, to B i C nadal sa tak samo od siebie > odlegle. Jezeli usuniesz B to A i C nadal sa tak samo od siebie odlegle. > I jezeli usuniesz C to A i B nadal sa od siebie tak samo odlegle. Nie w tym rzecz. Jeśli np. A i B byłyby odległe o 20, B i C też o 20, a A i C o 40, to kolejność usuwania zależy od kolejności wejściowej. Jeśli na wejściu idą A,B,C, to najpierw porównane będą A z B, B zostanie usunięty, potem A będzie porównany z C i C *nie* zostanie usunięty. Pozostaną A i C. Gdybyś jednak miał kolejność B, A, C, to najpierw B jest porównywany z A, A zostanie usunięty, potem B zostanie porównany z C, C zostanie usunięty, pozostanie samotny B. Teraz jasne? -- Szymon Sokół (SS316-RIPE) -- Network Manager B Computer Center, AGH - University of Science and Technology, Cracow, Poland O http://home.agh.edu.pl/szymon/ PGP key id: RSA: 0x2ABE016B, DSS: 0xF9289982 F Free speech includes the right not to listen, if not interested -- Heinlein H
Re: Sprawdzanie elementow tablicy - zagmatwane
Author: hubert depesz lubaczewski
Date: Thu, 16 Jul 2009 20:40
Date: Thu, 16 Jul 2009 20:40
13 lines
1345 bytes
1345 bytes
On 2009-07-16, Sync <sync@sync.com> wrote: > Chce przefiltrowac te tablice w taki sposob, azeby pozostaly w niej > produkty wylacznie *mocno rozniace sie* od siebie nazwa. Do tego celu ile (tak mniej więcej) będzie rekordów na wyjściu? bo jak odpowiednio mało, to zrób to brute force'em - każdy nowy element porównując po kolei (ale od końca) z wszystkimi które już się zakwalifikowały. depesz -- Linkedin: http://www.linkedin.com/in/depesz / blog: http://www.depesz.com/ jid/gtalk: depesz@depesz.com / aim:depeszhdl / skype:depesz_hdl / gg:6749007
Re: Sprawdzanie elementow tablicy - zagmatwane
Author: Sync
Date: Fri, 17 Jul 2009 04:52
Date: Fri, 17 Jul 2009 04:52
14 lines
1725 bytes
1725 bytes
Szymon Sokół wrote: > On Thu, 16 Jul 2009 21:08:21 +0200, Sync wrote: > Nie w tym rzecz. Jeśli np. A i B byłyby odległe o 20, B i C też o 20, a A i > C o 40, to kolejność usuwania zależy od kolejności wejściowej. Jeśli na > wejściu idą A,B,C, to najpierw porównane będą A z B, B zostanie usunięty, > potem A będzie porównany z C i C *nie* zostanie usunięty. Pozostaną A i C. > Gdybyś jednak miał kolejność B, A, C, to najpierw B jest porównywany z A, A > zostanie usunięty, potem B zostanie porównany z C, C zostanie usunięty, > pozostanie samotny B. Teraz jasne? Ale ja sie z tym zgadzam i jest to dla mnie jasne od poczatku. Zauwaz jednak, ze zaznaczylem w poprzednim poscie, ze *kolejnosc nie ma znaczenia*. Po prostu w liscie pozostanie jeden produkt najmocniej rozniacy sie nazwa od innych.
Re: Sprawdzanie elementow tablicy - zagmatwane
Author: Sync
Date: Fri, 17 Jul 2009 04:56
Date: Fri, 17 Jul 2009 04:56
31 lines
1650 bytes
1650 bytes
hubert depesz lubaczewski wrote: > On 2009-07-16, Sync <sync@sync.com> wrote: >> Chce przefiltrowac te tablice w taki sposob, azeby pozostaly w niej >> produkty wylacznie *mocno rozniace sie* od siebie nazwa. Do tego celu > > ile (tak mniej więcej) będzie rekordów na wyjściu? bo jak odpowiednio > mało, to zrób to brute force'em - każdy nowy element porównując po kolei > (ale od końca) z wszystkimi które już się zakwalifikowały. Zdaje sie, ze znalazlem rozwiazanie tego problemu, jednak potrzebuje jeszcze szybkiej podpowiedzi. Mam w liscie nastepujace elementy: Janek Krysia Bronek Janek Tadek W jaki sposob usunac z tej listy powtarzajace sie imiona, nie uzywajac zadnego modulu w stylu Array::Unique, a jedynie zwyklej petli? W tym wypadku chcialbym, zeby pozostaly: Janek Krysia Bronek Tadek Dzieki z gory za wszelkie sugestie.
Re: Sprawdzanie elementow tablicy - zagmatwane
Author: hubert depesz lubaczewski
Date: Fri, 17 Jul 2009 07:19
Date: Fri, 17 Jul 2009 07:19
18 lines
1580 bytes
1580 bytes
On 2009-07-17, Sync <sync@sync.com> wrote: > W jaki sposob usunac z tej listy powtarzajace sie imiona, nie uzywajac > zadnego modulu w stylu Array::Unique, a jedynie zwyklej petli? odpowiem, ale napierw powiedz czemu nie używając żadnego modułu. w ramach przygotowania do odpowiedzi przeczytaj http://www.shadowcat.co.uk/blog/matt-s-trout/but-i-cant-use-cpan/ bo prośba "zróbmy coś, ale nie używając żadnych modułów" jest jak coś w stylu "zawiążmy buty, ale nie używając rąk ani nóg". pewnie się da, będzie upierdliwe, i zasadniczo bezsensowne. depesz -- Linkedin: http://www.linkedin.com/in/depesz / blog: http://www.depesz.com/ jid/gtalk: depesz@depesz.com / aim:depeszhdl / skype:depesz_hdl / gg:6749007
Re: Sprawdzanie elementow tablicy - zagmatwane
Author: Adam Osuchowski
Date: Fri, 17 Jul 2009 09:06
Date: Fri, 17 Jul 2009 09:06
18 lines
1885 bytes
1885 bytes
hubert depesz lubaczewski wrote: > odpowiem, ale napierw powiedz czemu nie używając żadnego modułu. > > w ramach przygotowania do odpowiedzi przeczytaj > http://www.shadowcat.co.uk/blog/matt-s-trout/but-i-cant-use-cpan/ > > bo prośba "zróbmy coś, ale nie używając żadnych modułów" jest jak coś w > stylu "zawiążmy buty, ale nie używając rąk ani nóg". pewnie się da, > będzie upierdliwe, i zasadniczo bezsensowne. Bo są zagadnienia na tyle proste, że używanie do tego zewnętrznych modułów jest przerostem formy nad treścią. Na CPANie aż roi się od modułów-śmieci w wersji 0.01, lub niewiele większej, które służą do rozwiązywania problemów, z którymi można się uporać za pomocą pure Perla, a istnieją chyba tylko dlatego, że ich autorzy chcieli jakoś zaistnieć w środowisku. Nie jestem przeciwnikiem używania zewnętrznych modułów, ale trzeba znaleźć rozsądną granicę złożoności zagadnienia, która kwalifikuje wydelegowanie rozwiązania do osobnego modułu.
Re: Sprawdzanie elementow tablicy - zagmatwane
Author: Adam Osuchowski
Date: Fri, 17 Jul 2009 09:12
Date: Fri, 17 Jul 2009 09:12
32 lines
1499 bytes
1499 bytes
Sync wrote:
> Mam w liscie nastepujace elementy:
>
> Janek
> Krysia
> Bronek
> Janek
> Tadek
>
> W jaki sposob usunac z tej listy powtarzajace sie imiona, nie uzywajac
> zadnego modulu w stylu Array::Unique, a jedynie zwyklej petli?
>
> W tym wypadku chcialbym, zeby pozostaly:
>
> Janek
> Krysia
> Bronek
> Tadek
#v+
my @in = qw(Janek Krysia Bronek Janek Tadek);
my %x;
my @uniq = grep { !$x{$_}++ } @in;
undef %x;
#v-
Jeśli nie jest istotna kolejność listy wynikowej to można to uprościć do:
#v+
my @in = qw(Janek Krysia Bronek Janek Tadek);
my @uniq = keys %{{ map { $_ => 1 } @in }};
#v-
Re: Sprawdzanie elementow tablicy - zagmatwane
Author: hubert depesz lubaczewski
Date: Fri, 17 Jul 2009 12:14
Date: Fri, 17 Jul 2009 12:14
41 lines
2400 bytes
2400 bytes
On 2009-07-17, Adam Osuchowski <someone@somewhere.com> wrote:
> Bo są zagadnienia na tyle proste, że używanie do tego zewnętrznych
> modułów jest przerostem formy nad treścią. Na CPANie aż roi się od
> modułów-śmieci w wersji 0.01, lub niewiele większej, które służą do
> rozwiązywania problemów, z którymi można się uporać za pomocą pure Perla,
> a istnieją chyba tylko dlatego, że ich autorzy chcieli jakoś zaistnieć
> w środowisku. Nie jestem przeciwnikiem używania zewnętrznych modułów,
> ale trzeba znaleźć rozsądną granicę złożoności zagadnienia, która
> kwalifikuje wydelegowanie rozwiązania do osobnego modułu.
Argument relatywnie niezły, ale jednak:
use List::MoreUtils qw( uniq );
i potem:
@lista = uniq( @lista );
dlaczego jednak proponuję modułem (widziałem już twój post w którym
znalazłeś rozwiązanie z haszem)? 2 powody:
1. List::MoreUtils trzeba znać. nie przychodzi jeszcze razem z perlem,
ale używam go baaaaaaardzo często. Na przykład do tego by sprawdzić czy
coś jest w arrayu. Zrobienie tego samego samemu jest teoretycznie
trywialne, ale i tak zazwyczaj kończy się na absurdalnym:
if (grep { $_ eq 'wartosc' } @lista) {
2. Czytelność.
my %x;
@lista = grep { !$x{$_}++ } @lista;
vs.
@lista = uniq( @lista );
depesz
--
Linkedin: http://www.linkedin.com/in/depesz / blog: http://www.depesz.com/
jid/gtalk: depesz@depesz.com / aim:depeszhdl / skype:depesz_hdl / gg:6749007
Re: Sprawdzanie elementow tablicy - zagmatwane
Author: Sync
Date: Sat, 18 Jul 2009 14:07
Date: Sat, 18 Jul 2009 14:07
49 lines
2173 bytes
2173 bytes
Adam Osuchowski wrote:
> Jeśli nie jest istotna kolejność listy wynikowej to można to uprościć do:
>
> #v+
> my @in = qw(Janek Krysia Bronek Janek Tadek);
> my @uniq = keys %{{ map { $_ => 1 } @in }};
> #v-
Dobra, a teraz trudniejsza czesc tego zagadnienia: chce, aby nie tylko
imiona identyczle, ale *rowniez czesciowo podobne* byly takze usuwane z
listy (stopien podobienstwa okreslam za pomoca modulu
Text::LevenshteinXS). Dodatkowo elementy tablicy to referencje do
anonimowych haszy, tak, zeby bylo ciekawiej:
@ludzie = (
{ imie => "Kajtek", nazwisko => "Brzeczyszczykiewicz" },
{ imie => "Zenek", nazwisko => "Chrzaszczkiewicz" },
{ imie => "Benek", nazwisko => "Brzerzeczynski" },
{ imie => "Zosia", nazwisko => "Chrabaszczynska" },
{ imie => "Zenek", nazwisko => "Ksiazkiewicz" },
{ imie => "Krysia", nazwisko => "Nowak" },
);
A zatem chce, zeby w liscie pozostali wylacznie (sprawdzam tylko imiona):
Kajtek
Zenek
Zosia
Krysia
Usunieto:
Benek, bo bardzo podobny do Zenek
Zenek (2), bo identyczny z Zenek (1)
Gdyby nie byly to anonimowe hasze to juz dawno poradzilbym sobie z tym
uzywajac Quantum::Superpositions.
W tej sytuacji musze skorzystac z jakies standardowej petli, zeby
zdekodowac referencje.
Bede bardzo wdzieczny za pomoc.
Pozdrawiam.
Re: Sprawdzanie elementow tablicy - zagmatwane
Author: Adam Osuchowski
Date: Sat, 18 Jul 2009 19:30
Date: Sat, 18 Jul 2009 19:30
10 lines
1291 bytes
1291 bytes
Sync wrote:
> Gdyby nie byly to anonimowe hasze to juz dawno poradzilbym sobie z tym
> uzywajac Quantum::Superpositions.
A dlaczego nie możesz stworzyć, na podstawie danych z @ludzie, tymczasowej
struktury, odpowiadającej temu co potrzebuje na wejściu ten moduł?
Jeśli to miałaby być prosta lista zawierająca wyłącznie imiona to wystarczy:
my @ludzie2 = map { $_->{imie} } @ludzie;
Re: Sprawdzanie elementow tablicy - zagmatwane
Author: Szymon Sokół
Date: Sat, 18 Jul 2009 22:25
Date: Sat, 18 Jul 2009 22:25
29 lines
2556 bytes
2556 bytes
On Sat, 18 Jul 2009 19:30:37 +0000 (UTC), Adam Osuchowski wrote:
> Sync wrote:
>> Gdyby nie byly to anonimowe hasze to juz dawno poradzilbym sobie z tym
>> uzywajac Quantum::Superpositions.
>
> A dlaczego nie możesz stworzyć, na podstawie danych z @ludzie, tymczasowej
> struktury, odpowiadającej temu co potrzebuje na wejściu ten moduł?
>
> Jeśli to miałaby być prosta lista zawierająca wyłącznie imiona to wystarczy:
>
> my @ludzie2 = map { $_->{imie} } @ludzie;
Tylko potem może być problemem powiązanie wyników z pierwotnymi danymi
(przykładowo, czy ten Zenek, który został, to Chrzaszczkiewicz czy
Ksiazkiewicz?)
Ale ja w ogóle nie bardzo rozumiem sens użycia Quantum::Superpositions do
tego zadania. I nie bardzo rozumiem, dlaczego fakt występowania anonimowych
hashy coś tu komplikuje. Sync, czy możesz zademonstrować, jak chcesz użyć
tego modułu przy założeniu, że masz prostą listę typu:
@ludzie = ("Kajtek", "Zenek", "Benek", "Zosia", "Zenek", "Krysia");
?
--
Szymon Sokół (SS316-RIPE) -- Network Manager B
Computer Center, AGH - University of Science and Technology, Cracow, Poland O
http://home.agh.edu.pl/szymon/ PGP key id: RSA: 0x2ABE016B, DSS: 0xF9289982 F
Free speech includes the right not to listen, if not interested -- Heinlein H
Re: Sprawdzanie elementow tablicy - zagmatwane
Author: Maciej Misiak
Date: Sun, 19 Jul 2009 09:21
Date: Sun, 19 Jul 2009 09:21
81 lines
3102 bytes
3102 bytes
Sync pisze:
> Adam Osuchowski wrote:
>> Jeśli nie jest istotna kolejność listy wynikowej to można to uprościć do:
>>
>> #v+
>> my @in = qw(Janek Krysia Bronek Janek Tadek);
>> my @uniq = keys %{{ map { $_ => 1 } @in }};
>> #v-
>
> Dobra, a teraz trudniejsza czesc tego zagadnienia: chce, aby nie tylko
> imiona identyczle, ale *rowniez czesciowo podobne* byly takze usuwane z
> listy (stopien podobienstwa okreslam za pomoca modulu
> Text::LevenshteinXS). Dodatkowo elementy tablicy to referencje do
> anonimowych haszy, tak, zeby bylo ciekawiej:
>
> @ludzie = (
>
> { imie => "Kajtek", nazwisko => "Brzeczyszczykiewicz" },
> { imie => "Zenek", nazwisko => "Chrzaszczkiewicz" },
> { imie => "Benek", nazwisko => "Brzerzeczynski" },
> { imie => "Zosia", nazwisko => "Chrabaszczynska" },
> { imie => "Zenek", nazwisko => "Ksiazkiewicz" },
> { imie => "Krysia", nazwisko => "Nowak" },
>
> );
>
>
> A zatem chce, zeby w liscie pozostali wylacznie (sprawdzam tylko imiona):
>
> Kajtek
> Zenek
> Zosia
> Krysia
>
>
> Usunieto:
>
> Benek, bo bardzo podobny do Zenek
> Zenek (2), bo identyczny z Zenek (1)
>
>
> Gdyby nie byly to anonimowe hasze to juz dawno poradzilbym sobie z tym
> uzywajac Quantum::Superpositions.
>
> W tej sytuacji musze skorzystac z jakies standardowej petli, zeby
> zdekodowac referencje.
>
> Bede bardzo wdzieczny za pomoc.
>
> Pozdrawiam.
To może Ty tak po prostu napisz dwie funkcje pomocnicze i podwójną pętlę?
sub similar
{
my ($elem1, $elem2) = @_;
return 1 if $elem1->{imie} eq $elem2->{imie} albo jakis inny warunek;
return 0;
}
sub already
{
my($elem, $refRetList) = @_;
for(@$refRetList)
{
return 1 if similar($elem, $_);
}
return 0;
}
for (@ludzie)
{
if(!already($_, \@retList)
{ push @retList, $_ }
}
Przychodzi do głowy jeszcze transformacja Schwartza, ale podwójnej pętli
na moje oko nie ominiesz.
--
grizzley
Re: Sprawdzanie elementow tablicy - zagmatwane
Author: Szymon Sokół
Date: Sun, 19 Jul 2009 13:07
Date: Sun, 19 Jul 2009 13:07
31 lines
2144 bytes
2144 bytes
On Sun, 19 Jul 2009 11:21:09 +0200, Maciej Misiak wrote:
> sub similar
> {
> my ($elem1, $elem2) = @_;
> return 1 if $elem1->{imie} eq $elem2->{imie} albo jakis inny warunek;
> return 0;
> }
Prościej:
sub similar {
$_[0]->{imie} eq $_[1]->{imie};
}
A raczej, w tym przypadku:
sub similar {
$_[0]->{imie} eq $_[1]->{imie} or
Text:Levenshtein::distance($_[0]->{imie}, $_[1]->{imie}) > 30;
}
> Przychodzi do głowy jeszcze transformacja Schwartza, ale podwójnej pętli
> na moje oko nie ominiesz.
Nawet na pewno nie, chyba żeby zrobić ukrytą (za pomocą map albo rekurencji)
;-)
--
Szymon Sokół (SS316-RIPE) -- Network Manager B
Computer Center, AGH - University of Science and Technology, Cracow, Poland O
http://home.agh.edu.pl/szymon/ PGP key id: RSA: 0x2ABE016B, DSS: 0xF9289982 F
Free speech includes the right not to listen, if not interested -- Heinlein H
Re: Levenshtein - gdybanie
Author: Maciej Misiak
Date: Sun, 19 Jul 2009 14:10
Date: Sun, 19 Jul 2009 14:10
45 lines
2489 bytes
2489 bytes
Szymon Sokół pisze:
>> Przychodzi do głowy jeszcze transformacja Schwartza, ale podwójnej pętli
>> na moje oko nie ominiesz.
>
> Nawet na pewno nie, chyba żeby zrobić ukrytą (za pomocą map albo rekurencji)
> ;-)
Chyba, że...
<przypomnienie>
#v+
my @in = qw(Janek Krysia Bronek Janek Tadek);
my %x;
my @uniq = grep { !$x{$_}++ } @in;
undef %x;
#v-
</przypomnienie>
udałoby się znaleźć taką funkcję, że zadziałałoby
my @uniq = grep { !$x{fukcja($_)}++ } @in;
czyli funkcja musiałaby generować wspólny unikalny identyfikator dla
wszystkich wyrazów odległych 'levenshteinowo' mniej niż na 30 jednostek
od, np. 'Janek'. Noo, to załamać ręce wystarczy i koniec tematu :)
No ale pytanie co w wypadku, gdyby takoważ funkcja mierzyła dystans od
jakiegoś stałego wyrazu:
sub funkcja
{
Text:Levenshtein::distance($_[0], 'dowolnecostam');
}
?
Wtedy w hashu pod pozycją n przechowywalibyśmy listę wyrazów odległych o
n. Czy to cokolwiek daje? Pytanie czy dwa słowa odległe o n i m od tego
consta, są związane jakąkolwiek zależnością (nie wiem, tylko dla
odległości Hamminga coś takiego znalazłem). Bo jeśli tak, to byłoby to
pole do optymalizacji przynajmniej.
Ot, takie tam gdybanie nad wydumanym problemem jak człowiek kombinuje ze
wszech miar jak się nie zabrać do swojej pracy...
--
grizzley
Re: Levenshtein - gdybanie
Author: Szymon Sokół
Date: Sun, 19 Jul 2009 14:24
Date: Sun, 19 Jul 2009 14:24
13 lines
1925 bytes
1925 bytes
On Sun, 19 Jul 2009 16:10:37 +0200, Maciej Misiak wrote: > Wtedy w hashu pod pozycją n przechowywalibyśmy listę wyrazów odległych o > n. Czy to cokolwiek daje? Pytanie czy dwa słowa odległe o n i m od tego > consta, są związane jakąkolwiek zależnością Tak, są odległe od siebie o co najwyżej n+m :-) (nie, to raczej nic nie daje). -- Szymon Sokół (SS316-RIPE) -- Network Manager B Computer Center, AGH - University of Science and Technology, Cracow, Poland O http://home.agh.edu.pl/szymon/ PGP key id: RSA: 0x2ABE016B, DSS: 0xF9289982 F Free speech includes the right not to listen, if not interested -- Heinlein H
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads