© 2013 All rights reserved.
4

Java: Jednoduchý česko-anglický slovník

Naprogramovat jednoduchý anglicko-český a česko-anglický slovník je velmi jednoduché, co potřebujete je pouze databáze slovíček a frází, ve kterých budete vyhledávat.

Základ jakéhokoli slovníku jsou přeložená slovíčka a fráze, ve kterých může program vyhledávat.
Pro můj jednoduchý slovník jsem se rozhodl využít GNU/FDL anglicko-český slovník, který obsahuje několik tisíc přeložených slov.



slovnik

Jednotlivá slova jsou uložena ve slovníku vždy na jednom řádku a to pustupně takto:

  • anglické slovo [TAB]
  • české slovo [TAB]
  • poznámky [TAB]
  • speciální poznámky [TAB]
  • jméno překladatele

Některé řádky ve slovníku obsahují pouze poznámky. Tyto řádky jsou započaty znakem #, a tyto řádky jsou pro data ve slovníku nepodstatná a proto se jim při načítání slov vyvarujeme.

Pro náš jednoduchý slovník, nás budou zajímat pouze tři první sloupce. Tedy budeme potřebovat český a anglický význam slova a po případě ještě poznámku ke slovu, která značí o jaký slovní druh slova se jedná, nebo upřesňují daný význam slova.

Po shlédnutí formátu uložených dat se můžeme pustit do práce.

Slovník

Slovník bude obsahovat jednoduché grafické rozhraní, ve kterém bude možnost zadat hledané slovo, spustit vyhledávání kliknutím na tlačítko hledat a sledovat výsledky vyhledávání.

Navíc zde bude možnost přepínat mezi anglicko-českým nebo česko-anglickým slovníkem.

Program doplníme o stavový řádek, ve kterém se uživateli budou vypisovat informace o průběhu hledání, nebo informace o databázi slovníku.

Načtení dat

Základem celého slovníku jsou data.

Program bude fungovat tak, že si při spuštění načte všechna data do paměti a v nich bude později vyhledávat.

Pro uložení jsem zvolil tři ArrayListy, do kterých si zvlášť uložím česká slovíčka, anglická slovíčka a poznámky. Všechny tři Listy budou mít stejné indexy pro stejné řádky v souboru, takže nebude problém dle těchto indexů rozlišovat jednotlivá slova.

Funkce funguje velmi jednoduše:

Po spuštění zjistí, zda existuje soubor se slovíčky, v mém případě se jedná o soubor directory/slovnik_data_utf8.txt.

Pokud takový soubor existuje, začne jej po řádcích číst a pomocí funkce split rozdělovat dle tabulátorů.

Vždy po načtení nového řádku nejprve kontroluje, zda není první znak #, a tím pádem se nejedná o poznámku v souboru.

Nakonec do stavového řádku napíše výsledek načítání:

Hledání slov

Pokud máme načtena všechna data, můžeme v nich začít vyhledávat.

Funkce pro načtení dat bude obsahovat tři vstupní parametry. První z nich bude hledané slovo a další dva budou seznamy slovíček.

Seznamy slovíček budeme do funkce předávat takovým způsobem, že na prvním místě bude seznam slovíček ve kterých vyhledáváme, a tím pádem budeme moci funkci používat jak pro anglicko-české vyhledávání tak pro opačné. Na druhém místě (tedy třetí parametr) bude seznam, ze kterého vypisujeme nalezená slova.

Pro vyhledávání jsem zvolil dvě TreeMapy. Do první z nich se ukládají nalezená slovíčka a do druhé nalezené fráze.

Při vyhledávání projdeme v cyklu celý seznam, který je do funkce předaný jako druhý parametr a v něm vyhledáváme slovíčka.

Po nalezení známe index, pod kterým je v seznamu, předaném jako třetí parametr jeho přeložený význam.

Při vyhledávání hledáme jak slovíčka, tak fráze, které na dané slovo začínají.

U výpisu nejprve vypíšeme do JListu nalezená slovíčka a až pod nimi fráze, pro lepší orientaci.
Nakonec vypíšeme informace do stavového řádku programu:

V grafickém rozhraní bude možnost přepínat si mezi zvoleným jazykem pro hledání. Dle přepnutí této hodnoty se nám bude upravovat hodnota v proměnné „rezim“, podle této proměnné můžeme předávat správné parametry do funkce search_words:

Grafické rozhraní

Kód grafického rozhraní si můžete prohlédnout na konci článku, kde je umístěn kompletní zdrojový kód programu.

Základem grafického rozhraní je pole pro vyhledávání a seznam pro výpis nalezených slov ve formě Jlistu.

Po odeslání hledaného slova se nejprve zkontroluje, zda řetězec není prázdný a pokud ne, volá se funkce find_and_print_words.

Tato funkce rozhodne dle nastaveného režimu o posloupnosti parametrů a volá funkci search_words.

Kompletní zdrojový kód

Kvůli délce zdrojového kódu jsem jej umístil do externího souboru, který si můžete stáhnout.
Soubor neobsahuje funkci Main!
directory.java

Comments (4)

Dobrý den, mám problémy s rozchozením Vašeho slovníku. Program sice běhá ale nenajde buď nic nebo vypíše jenom nesmysly. Sadu slovíček jsem si stáhl a tu to i načte, ale jak říkám problém je s vyhledáváním. Myslíte, že byste mi mohl poslat celý zdrojový kód i s funkcí main?

me taky prosim.

Metoda main muze vypadat takto:
public static void main(String args[]) {
new Directory();
}
V metode load_data() je chyba:
//rozdelime radek dle tabulatoru.
String [] lines = line.split("t");
je spatne a spravne je toto:
String [] lines = line.split(" ");

Reaguji na vlastni komentar (zda se, ze funkcnost reakce na komentare tu ma problemy…)
Behem postu doslo k uprave meho textu, takze jeste jednou. Na radku
String [] lines = line.split("t");
ma byt pred znakem "t" backslash.

Add comment

About
Hi, i am programmer from the Czech Republic. I love web development (Ruby, Ruby on Rails, PHP, Nette) and iOS development (Objective-C, Cocoa).
To cooperate, here is my phone:
+420 608 836