[ siegmound @ 08.12.2013. 09:51 ] @
Imam bazu kreiranu kao ovo:



Unutar nje imam oko 20 jezika i preko 3mil prevoda.

Koji je najbolji poziv za prijevod jedne riječi s jednog jezika na drugi?


Npr:

[CODE]LANGUAGE
LANGUAGE_ID | LANGUAGE_NAME
1|'english'
2|'german'
3|'spain'

WORD
WORD_ID | LANGUAGE_ID | WORD_TEXT
1|'1'|'house'
2|'1'|'home'
3|'2'|'haus'
4|'3'|'casa'

TRANSLATION
WORD_ID1 | WORD_ID2
1|3
3|1
1|4
4|1
2|3
3|2
2|4
4|2
4|3
3|4[/CODE]


I netko želi prevesti riječ 'home' s engleskog na njemački?
Jel ovo dobra baza za moj rječnik?
[ djoka_l @ 08.12.2013. 12:19 ] @
3 miliona pojmova je vrlo impresivan fond reči.
Što se tiče baze, ona je onoliko dobra koliko je tebi korisna, ali može mnogo bolje.

Recimo, da uzmemo baš reč "home" na engleskom. Ona može da se prevede i kao "kuća" i kao "dom". Međutim u frazi "home meal" ona znači domaći (ona je ovde pridev a ne imenica). Recimo help može biti pomoć (imenica) ili pomoći (glagol). U skladu sa tim, ta reč bi se prevela na nemački ili kao Hilfe ili kao hilfen.

Uzmimo reč house koja se nalazi u 20 jezika. To prouzrokuje da u tabeli transataion dobiješ 380 slogova (20*19).
Ako bi u tabelu transaltion dodao polje bidirectional, smanjio bi broj slogova upola. Primer:

select word_id2
from translation
where word_id1=1
union
select word_id1
from translation
where word_id2=1
and bidirectional = 1

pod uslovom da postoji indeks nad word_id1 i drugi indeks nad word_id2, bidirectional upit bi mogao da bude brži, jer radi nad upola manjom tabelom.

Ako imaš nameru da se ovim ozbiljnije baviš, pogledaj, na primer http://wordnet.princeton.edu/ (engleski rečnik). Jako je lepo organizovan, poseduje ogroman broj reči, a iz njegove organizacije možeš mnogo da naučiš.
[ tuolarips @ 08.12.2013. 13:02 ] @
Slazem se u potpunosti sa svim sto je rekao djoka_l, samo me zanima da li zaista ima potrebe za bidirectional kolonom? Koliko se meni cini, bidirectional ce uvek biti 1 (iliti true), i samo bi usporio upit i uvecao bazu..
[ siegmound @ 08.12.2013. 13:10 ] @
Hvala ti puno na odgovoru djoka_l, sviđa mi se tvoj prijelog. Samo ću morati još razmisliti kako organizirati tu bazu,
nisam siguran ni da je ovo najbolja opcija. S obzirom da je ovo za sad samo prijevod sa hrv i njem na 20 svjetskih jezikla.
Plan mi je sve te kobinacije posložiti, imam jako velike baze prijevoda od desetke GB..
Tako da krajnji broj prijevoda još nisam ni sam siguran koji će biti. Ovo sa uštedom od pola mi je super.

Znam za taj wordnet, ali nikad nisam gledao njegovu strukturu s obzirom da meni treba translation, a ne značenje riječi.
Makar sam predvidio i opise uz primarnu riječ ali to jednom u budučosti.

Ako imaš kakav prijedlog još volio bi ga čuti, i još jednom hvala ti na mišljenju.
[ siegmound @ 08.12.2013. 13:14 ] @
Citat:
tuolarips:
Slazem se u potpunosti sa svim sto je rekao djoka_l, samo me zanima da li zaista ima potrebe za bidirectional kolonom? Koliko se meni cini, bidirectional ce uvek biti 1 (iliti true), i samo bi usporio upit i uvecao bazu..

Vidiš to nisam nikad ni razmišljao, uvijek sam ostavljao mogučnost da u suprotnom smjeru možda ne mora biti jednako značenje kao ovo.
Ali nekako mi se čini da možda nije ni potrebno.

Inače to sve planiram pokrenuti na dictaz.com nadam se do 1.1., ovaj u profilu mi je stari sajt koji sam napravio još kao srednjoškolac.
[ siegmound @ 08.12.2013. 14:03 ] @
Citat:
djoka_l:
select word_id2
from translation
where word_id1=1
union
select word_id1
from translation
where word_id2=1
and bidirectional = 1


Još samo jedno brzo pitanje, ovo ti izbaci rezultat word_id: {3, 4} a ne samo za njemački jezik, već pokupi i španjolski prijevod.
To znači da ću morati još jedan upit radit tako da i te rezultate dodatno profiltriram, zar ne?
[ djoka_l @ 08.12.2013. 14:09 ] @
Code (sql):

SELECT id
FROM ( SELECT word_id2 AS id,
         FROM translation
         WHERE word_id1=1
         UNION
         SELECT word_id1
         FROM translation
         WHERE word_id2=1
         AND bidirectional = 1 ) AS ids, LANGUAGE AS l, word AS w
WHERE l.language_id=1
AND w.language_id=1
AND ids.id = w.word_id
 


edit: u upitu nije potrebna tabela language, zanemari...
[ siegmound @ 08.12.2013. 14:44 ] @
Isprobao i sve radi.
Za gornji primjer na njemački jezik jedino još trebalo je zamijeniti predzadnji red sa:

AND w.language_id=2

Inaće vraća prazno.

Sve u svemu, hvala puno. :)
[ tuolarips @ 08.12.2013. 14:51 ] @
Mislim da je djoka_l stavljao svuda jedinice cisto da bi napisao primer :) Svaka ta jedinica treba da bude parametrizovana (osim bidirectional), i da umesto nje stavis konkretne vrednosti.