Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

Δημοσ.

Υπάρχει καποια συγκεκριμένη μέθοδος / pattern η οποια χρησιμοποιειται για λεξικό;

Απ'οσα ξέρω πρεπει να χρησιμοποιήσω maps με keys κτλ για την αντιστοίχηση των κλειδιών/λέξεων.Απο εκεί και μετά υπάρχει κάποιο ετοιμο component για Android πάντα που ισως να κάνει την δουλειά αυτή;
Επίσης για παράδειγμα οταν κάνεις αναζήτηση στις επαφές και πληκτρολογείς το γράμμα 'Α' εμφανίζονται αμέσως ολες οι επαφές οι οποίες ξεκινούν με το γράμμα αυτο.Ποιο Component είναι αυτο; 

Δημοσ.

Δεν νομίζω να υπάρχει κάποιο έτοιμο. Αν εννοείς πχ ελληνικό λεξικό με λεξεις και μετάφραση θα σου πρότεινα να βάλεις όλες τις λέξεις σε ενα sqlite και να έχεις ένα handler εκεί που θα γράφει ο χρήστης την λέξη να έχεις ενα onTextChange (δεν θυμάμαι ακριβώς πως λέγεται) να εκτελείς query στην βάση και να σου επιστρέφει τα αποτελέσματα. 

Κάπως έτσι δουλεύει και η αναζήτηση που περιγράφεις.

Αμα κάνεις τελικά βάση απλα βάλε σαν κλειδί να είναι η το πεδίο που θα κάνεις αναζήτηση για να δημιουργηθεί και το ευρετήριο και να γίνονται πιό γρήγορα οι αναζητήσεις.

Δημοσ.

Ναι με το sqlite θα γινει η db όμως σκεφτομαι πως είναι καλύτερα να δημιουργήσω δύο πίνακες π.χ ΛΕΞΕΙΣ και ΜΕΤΑΦΡΑΣΗ.

Απο εκεί και μετα κατα την εκκίνηση της εφαρμογής η βάση θα φορτώνεται σε ενα Hashtable και οταν ο χρήστης θα επιλέγει για παράδειγμα το γράμμα 'Α' τοτε να ψάχνει ολες τις λέξεις που ξεκινούν με το γράμμα αυτο.Γενικά γενικά το περιγραψα και νομιζω πως ετσι είναι γρηγοτερα τα αποτελεσματα.Τι λες;

Δημοσ.

Ναι σίγουρα και ετσι όπως το λές θα μπορείς να ψάχνεις και αντίστροφα πχ και Ελληνικα -> Αγγλικά και Αγγλικά -> Ελληνικά αρκετά γρήγορα απλά οι πίνακες σου θα γίνουν πιό μεγάλοι γιατί πχ θα έχεις 2 πεδία στον κάθε πίνακα ενα με την λέξη και ένα με το "link" της στην μετάφραση.

 

Ψάξτο αμα θές αντί να φτιάξεις 2 πίνακες να το φτιάξεις σε έναν πίνακα απλά να έχεις 2 ευρετήρια, ένα για την λέξη και ένα για την μετάφραση. Στην SQL γίνετια απλά πρέπει να το φτιάξεις εσύ το 2ο ευρετήριο , για το sqlite δεν έχω ψάξει αλλα λογικά θα γίνετια και εκεί. 

Δημοσ.

Το hashtable θα είναι περίπου ό,τι πιο αργό μπορεί κανείς να βάλει για ψάξιμο λέξεων που ξεκινούν από κάποιο prefix.

 

Το εισαγωγικού επιπέδου data structure για τέτοιες δουλειές (και γενικότερα για λεξικά) είναι το trie.

  • Like 3
Δημοσ.

Ειχα κάνει κατι αντιστοιχο για windows με 650.000+ ελληνικές λέξεις.

Επειδή ήταν λιγο βαρύ για τη μνημη (πανω από 20MB), ταξινόμησα αλφαβητικα τις λέξεις σε ένα αρχείο.

Εκανα μια δυαδική αναζήτηση του αρχείου για να εντοπίσω το μπλοκ των λεξεων που αρχίζαν με κάποιο γράμμα (γραμματα).

Ηταν πολύ αμεσο χωρίς καθυστέριση και με ελαχιστη μνημη.

Το αρνητικό ήταν ότι το ListView αργούσε να εμφανίσει τα αποτελέσματα όταν ηταν πολλα. π.χ. όλες οι λέξεις απο "α"

Δημοσ.

Το hashtable θα είναι περίπου ό,τι πιο αργό μπορεί κανείς να βάλει για ψάξιμο λέξεων που ξεκινούν από κάποιο prefix.

 

Το εισαγωγικού επιπέδου data structure για τέτοιες δουλειές (και γενικότερα για λεξικά) είναι το trie.

Trie for the win !! :D -Μια καλη ευκαιρια να κανεις δικη σου υλοποιηση, αφου δεν υπαρχει στο SDK-

Δημοσ.

εχω κολλήσει και σπασαν τα νευρα μου.

Κατεβάζω το sqlite3 απο την σελίδα του,τρέχω το .exe αρχείο και με την εντολη: >sqlite3 myDatabase.db; μου φτιάχνει την db κανονικά στον ίδιο φάκελο.Την επόμενη μέρα και ενώ δοκίμαζα στον eclipse πως να φτιάχνω manually την db με εντολές τυχαία ξαναανοίγω το sqlite3.exe και δίνοντας την ίδια εντολη ΔΕΝ μου φτιάχνει την db και μου εμφανίζει: Error: near "sqlite3": syntax error !!!

Παρατάω το sqlite3.exe και λέω θα την φτιάξv manually την βάση μου...

 

Εχω δυο αρχεία λοιπόν.Το ένα είναι το UI και το αλλο περιεχει τον κώδικα για την δημιουργία της βάσης.

Το UI :

public class MainActivityClass extends Activity {

	public static DatabaseHandler dh;
 
	static final String deptTable="Dept";
	static final String colDeptID="DeptID";
	static final String colDeptName="DeptName";
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main_layout);
		
		dh = new DatabaseHandler(getApplicationContext());
		 
		if(dh != null){
			Toast.makeText(MainActivityClass.this, "Database is created!", Toast.LENGTH_SHORT).show();			
			}else{
			Toast.makeText(MainActivityClass.this, "Error creating database!", Toast.LENGTH_SHORT).show();
			}		
		
		TextView tv = new TextView(this);
		
		tv = (TextView)findViewById(R.id.textView1); 
		tv.setText( "SOMETHING TELOS PANTON" );
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.main_layout, menu);
		return true;
	}

}

και το αρχείο που φτιάχνει την db μου ( κάνει extends την SQLiteOpenHelper κλάση )

 

:

 


public class DatabaseHandler extends SQLiteOpenHelper{

	public static final String DB_TEST = "contacts.db";
	public static final String TABLE_NAME = "people";
	public static final String NAME = "name";
	public static final String PHONE = "phone";

	public DatabaseHandler(Context context) {
		super(context, DB_TEST, null, 1);
		// TODO Auto-generated constructor stub
	}

	@Override
	public void onCreate(SQLiteDatabase db) {
		// TODO Auto-generated method stub
		db.execSQL("CREATE TABLE " + TABLE_NAME + " (_id INTEGER PRIMARY KEY AUTOINCREMENT, " + NAME + " TEXT, " + PHONE + " TEXT);");
		
		ContentValues values = new ContentValues();

		values.put(NAME, "Tom");
		values.put(PHONE, "0000001");
		db.insert(TABLE_NAME, NAME, values);

		values.put(NAME, "John");
		values.put(PHONE, "0000002");
		db.insert(TABLE_NAME, NAME, values);

		values.put(NAME, "Bob");
		values.put(PHONE, "0000003");
		db.insert(TABLE_NAME, NAME, values);

		values.put(NAME, "Joe");
		values.put(PHONE, "0000004");
		db.insert(TABLE_NAME, NAME, values);
		
		
		
	}

	@Override
	public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
		// TODO Auto-generated method stub
		db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);
		onCreate(db);
	}

}

Κανω Run και το Toast μου εμφανιζει το μήνυμα πως η db εχει δημιουργηθεί επιτυχώς...

Ωραία λέω αλλα ΠΟΥ βρίσκεται το αρχείο της βάσης;;;

googlarontas βρίσκω πως πρέπει να βρίσκεται στον φακελο  του DDMS -> File Explorer (Tab) data/data/mypackage/databases !!

Πηγαινω και εγω data/data/mypackage αλλά δεν υπάρχει κανένας φάκελος databases!!!!


τι συμβαίνει επιτέλους;


 

Δημοσ.

 

 

Δεν περίμενε κανένας να δει ξαφνικά trie ελπίζω...  :P

 

Για τους πιο μερακλήδες υπάρχει και το πολύ πωρωμένο data structure DAWG (I am not making this up). Explanation, paper (pdf), c++ source.

 

 

  • Like 2
Δημοσ.

 

 

Δεν περίμενε κανένας να δει ξαφνικά trie ελπίζω...  :P

 

Για τους πιο μερακλήδες υπάρχει και το πολύ πωρωμένο data structure DAWG (I am not making this up). Explanation, paper (pdf), c++ source.

 

 

+1 Γιατι εμεθα και το anonymus namespace.

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...