コード例 #1
0
        public void Load(MarkovFactory factory)
        {
            Log.Debug ( TAG, "Loading." );
            myDatabase = context.OpenOrCreateDatabase (DATABASE_NAME, FileCreationMode.WorldReadable, null);
            ICursor cursor = myDatabase.RawQuery ("SELECT * FROM 'words'", null);

            int firstWordIndex = cursor.GetColumnIndex("firstWord");
            int secondWordIndex = cursor.GetColumnIndex("secondWord");
            int instanceCountIndex = cursor.GetColumnIndex("instanceCount");

            string firstWord, secondWord;
            int instanceCount;

            cursor.MoveToFirst ();
            while (!cursor.IsAfterLast)
            {
                firstWord = cursor.GetString ( firstWordIndex );
                secondWord = cursor.GetString ( secondWordIndex );
                instanceCount = cursor.GetInt( instanceCountIndex );

                if (!factory.chain.ContainsKey( firstWord ) )
                {
                    MarkovWord link = new MarkovWord(firstWord);
                    factory.chain.Add( firstWord, link );
                }

                MarkovWord afterWord;

                if (!factory.chain.ContainsKey ( secondWord ) )
                {
                    afterWord = new MarkovWord ( secondWord );
                    factory.chain.Add( secondWord, afterWord );
                }

                afterWord = factory.chain[secondWord];

                factory.chain[ firstWord ].afters.Add( afterWord, instanceCount );

                cursor.MoveToNext();
            }
        }
コード例 #2
0
        public void Save(MarkovFactory factory)
        {
            Log.Debug ( TAG, "Saving chain." );
            myDatabase = context.OpenOrCreateDatabase(DATABASE_NAME, FileCreationMode.Private, null);
            myDatabase.ExecSQL("DROP TABLE IF EXISTS 'words'");
            myDatabase.ExecSQL("CREATE TABLE IF NOT EXISTS 'words' (firstWord TEXT, secondWord TEXT, instanceCount INTEGER NOT NULL);");

            var chain = factory.chain;
            DatabaseUtils.InsertHelper ih = new DatabaseUtils.InsertHelper (myDatabase, "words");

            Stopwatch stopwatch = Stopwatch.StartNew();
            StringBuilder insertQuery = new StringBuilder();

            //insertQuery.Append("INSERT INTO 'words' ('firstWord', 'secondWord', 'instanceCount') VALUES (?, ?, ?)");
            myDatabase.BeginTransaction();
            string sql = "INSERT INTO 'words' ('firstWord', 'secondWord', 'instanceCount') VALUES (?, ?, ?)";
            SQLiteStatement insert = myDatabase.CompileStatement(sql);

            foreach (KeyValuePair<string, MarkovWord> word in chain)
            {
                foreach (KeyValuePair<MarkovWord, int> after in word.Value.afters)
                {
                    insert.BindString(1, word.Value.word);
                    insert.BindString(2, after.Key.word);
                    insert.BindDouble(3, after.Value);
                    insert.Execute();
                }
            }
            myDatabase.SetTransactionSuccessful();
            myDatabase.EndTransaction();
            stopwatch.Stop ();
            Log.Debug (TAG, "Database insert completed in " + stopwatch.Elapsed.TotalMilliseconds);
        }