Exemple #1
0
        private void RadialNeuralLearn()
        {
            if (learningDocInfo != null && learningDocInfo.SourceDir != Settings.Default.pathLearningDir)
            {
                learningDocInfo = null;
            }

            //ładuje listę kategorii
            DocumentClass.LoadFromFiles(Settings.Default.pathLearningDir, PreprocessingConsts.CategoryFilePattern);

            //stworzenie słownika
            dictionary = DictionaryFactory(Settings.Default.pathSummaryFile);
            //dictionary.LearningData = new List<DocClass.Src.Learning.LearningPair>();

            //stworzenie sieci
            radialNetwork = new RadialNetwork(Settings.Default.numberNeuronsHidden, DocumentClass.CategoriesCount);

            DocumentList dl = PreprocessingUtility.CreateLearningDocumentList(Settings.Default.pathLearningDir, dictionary, (DocumentRepresentationType)Settings.Default.documentRepresentationType, learningDocInfo);

            if (radialNetwork.Learn(dl) == false)
            {
                radialNetwork = null;
                dictionary    = null;
            }
        }
Exemple #2
0
        /// <summary>
        /// Odczytuje sieć nuronową z podanego pliku.
        /// </summary>
        /// <param name="pathFile">Scieżka do pliku.</param>
        public void LoadRadialNetwork(String pathFile)
        {
            Stream          stream     = File.Open(pathFile, FileMode.Open);
            BinaryFormatter bFormatter = new BinaryFormatter();

            this.radialNetwork                   = (RadialNetwork)bFormatter.Deserialize(stream);
            this.dictionary                      = (Dictionary)bFormatter.Deserialize(stream);
            this.learningDocInfo                 = (LearningDocInfo)bFormatter.Deserialize(stream);
            DocumentClass.DocumentCategories     = (List <String>)bFormatter.Deserialize(stream);
            this.learnDocumentRepresentationType = (DocumentRepresentationType)bFormatter.Deserialize(stream);
            this.learnDictionaryType             = (DictionaryType)bFormatter.Deserialize(stream);
            LoadSettings(stream, bFormatter);
            stream.Close();

            this.form.LoadClassificatorEnd(ClasyficatorType.RadialNeural);
        }
Exemple #3
0
        /// <summary>
        /// Tworzy nowy słownik.
        /// </summary>
        /// <param name="sourceDir">Katalog zawierający wszystkie pliki uczące.</param>
        /// <param name="summaryFile">Plik z podsumowaniem wszystkich plików.</param>
        /// <param name="size">Ilość słów w słowniku</param>
        public CtfIdfDictionary(String sourceDir, String summaryFile, int size)
        {
            Dictionary <String, WordCountPair> tmpDictionary = new Dictionary <string, WordCountPair>();
            //wczytanie informacji o wszystkich słowach
            LearningDocInfo learningDocInfo        = new LearningDocInfo(sourceDir, summaryFile);
            Dictionary <String, WordInfo> allWords = learningDocInfo.AllWordsInfo;
            int allDocCount = learningDocInfo.AllDocCount;
            //tworzenie słownika
            DirectoryInfo sourceDirInfo = new DirectoryInfo(sourceDir);

            foreach (DirectoryInfo dirInfo in sourceDirInfo.GetDirectories()) //przechodzę po wszystkich podkatalogach
            {
                DirectoryInfo stemDir = new DirectoryInfo(dirInfo.FullName + "//stem");
                foreach (FileInfo fileInfo in stemDir.GetFiles()) //przechodzę po wszystkich plikach
                {
                    WordCountList wordsInFile     = new WordCountList(fileInfo.FullName);
                    int           wordsInDocCount = wordsInFile.GetAllWordsCount();
                    foreach (WordCountPair wordCountPair in wordsInFile) //przechodzę po wszsytkich słowach
                    {
                        double tfIdf = PreprocessingUtility.ComputeTfIdf(wordCountPair.Count, wordsInDocCount, allDocCount, allWords[wordCountPair.Word].InclDocCount);
                        if (tmpDictionary.ContainsKey(wordCountPair.Word))
                        {
                            tmpDictionary[wordCountPair.Word].Count += tfIdf;
                        }
                        else
                        {
                            tmpDictionary.Add(wordCountPair.Word, new WordCountPair(wordCountPair.Word, tfIdf));
                        }
                    }
                }
            }
            //wybranie odpowiednich słów
            WordCountPair[] tmpArray = new WordCountPair[tmpDictionary.Count];
            tmpDictionary.Values.CopyTo(tmpArray, 0);
            Array.Sort(tmpArray);
            Array.Reverse(tmpArray);
            //kopiowanie do właściwej listy
            wordList = new List <string>();
            for (int i = 0; i < size; i++)
            {
                wordList.Add(tmpArray[i].Word);
            }
        }
Exemple #4
0
        /// <summary>
        /// Metoda zwracająca reprezentacjie dokumentu na podstawie
        /// wybranej opcji.
        /// </summary>
        /// <param name="pathFile"></param>
        /// <returns></returns>
        private Document DocumentFactory(String pathFile)
        {
            switch ((DocumentRepresentationType)Settings.Default.documentRepresentationType)
            {
            case DocumentRepresentationType.Binary:
                return(new BinaryDocument(pathFile, dictionary, null));

            case DocumentRepresentationType.Own:
                return(new OwnDocument(pathFile, dictionary, null));

            case DocumentRepresentationType.TfIdf:
                if (learningDocInfo == null)
                {
                    learningDocInfo = new LearningDocInfo(Settings.Default.pathLearningDir,
                                                          Settings.Default.pathSummaryFile);
                }
                return(new TfIdfDocument(pathFile, dictionary, null, learningDocInfo));

            default:
                throw new NotImplementedException("Nieznany typ dokumentu.");
            }
        }
Exemple #5
0
        /// <summary>
        /// Metoda zwracające odpowiednią reprezentacjie słownika na
        /// podstweie wybranej opcji.
        /// </summary>
        /// <param name="pathSummary"></param>
        /// <returns></returns>
        private Dictionary DictionaryFactory(String pathSummary)
        {
            WordCountList wordCountList = new WordCountList(pathSummary);

            if (learningDocInfo == null)
            {
                learningDocInfo = new LearningDocInfo(Settings.Default.pathLearningDir,
                                                      Settings.Default.pathSummaryFile);
            }
            switch ((DictionaryType)Settings.Default.dictionaryType)
            {
            case DictionaryType.CtfIdf:
                return(new CtfIdfDictionary(Settings.Default.pathLearningDir, pathSummary, wordCountList.GetUniqueWordsCount()));

            case DictionaryType.Fixed:
                return(new FixedDictionary(Settings.Default.pathLearningDir, wordCountList.GetUniqueWordsCount()));

            case DictionaryType.Frequent:
                return(new FrequentDictionary(pathSummary, wordCountList.GetUniqueWordsCount()));

            default:
                throw new NotImplementedException("Nieznany typ słownika.");
            }
        }
Exemple #6
0
        /// <summary>
        /// Dodaje listê dokumentów na podstawie katalogu z plikami w postaci s³owo, iloœæ wyst¹pieñ.
        /// </summary>
        /// <param name="sourceDir">Katalog z plikami.</param>
        /// <param name="dictionary">Rodzaj s³ownika, który ma byæ u¿yty do tworzenia nowych dokumentów.</param>
        /// <param name="drt">Rodzaj dokumentów.</param>
        /// <param name="className">Nazwa klasy, do której maj¹ nale¿eæ wszystkie nowo dodane elementu lub null, jeœli klasa jest nieznana.</param>
        /// <param name="learningDocInfo">Obiekt zawieraj¹cy informacje o wszystkich dokumentach ucz¹cych.
        /// Je¿eli dana reprezentacja nie potrzebuje tego obiektu, parametr jest ignorowany.</param>
        public void AddDocumentsFromDir(String sourceDir, Dictionary dictionary, DocumentRepresentationType drt, String className, LearningDocInfo learningDocInfo)
        {
            CheckCorrectness(drt, dictionary.GetDictionaryType());

            Console.WriteLine("Adding dir: " + sourceDir);

            DirectoryInfo sourceDirInfo = new DirectoryInfo(sourceDir);

            foreach (FileInfo fileInfo in sourceDirInfo.GetFiles())
            {
                Console.WriteLine("Adding file: " + fileInfo.FullName);
                switch (drt)
                {
                case DocumentRepresentationType.TfIdf:
                    documentList.Add(new TfIdfDocument(fileInfo.FullName, dictionary, className, learningDocInfo));
                    break;

                case DocumentRepresentationType.Binary:
                    documentList.Add(new BinaryDocument(fileInfo.FullName, dictionary, className));
                    break;

                case DocumentRepresentationType.Own:
                    documentList.Add(new OwnDocument(fileInfo.FullName, dictionary, className));
                    break;

                default:
                    throw new Exception("Unknown DocumentRepresentationType: " + drt);
                }
            }
        }
Exemple #7
0
 /// <summary>
 /// Tworzy listê na podstawie katalogu z plikami w postaci s³owo, iloœæ wyst¹pieñ.
 /// </summary>
 /// <param name="sourceDir">Katalog z plikami.</param>
 /// <param name="dictionary">Rodzaj s³ownika, który ma byæ u¿yty do tworzenia nowych dokumentów.</param>
 /// <param name="drt">Rodzaj dokumentów.</param>
 /// <param name="className">Nazwa klasy, do której maj¹ nale¿eæ wszystkie nowo dodane elementu lub null, jeœli klasa jest nieznana.</param>
 /// <param name="learningDocInfo">Obiekt zawieraj¹cy informacje o wszystkich dokumentach ucz¹cych.
 /// Je¿eli dana reprezentacja nie potrzebuje tego obiektu, parametr jest ignorowany.</param>
 public DocumentList(String sourceDir, Dictionary dictionary, DocumentRepresentationType drt, String className, LearningDocInfo learningDocInfo)
 {
     documentList = new List <Document>();
     AddDocumentsFromDir(sourceDir, dictionary, drt, className, learningDocInfo);
 }
Exemple #8
0
        /// <summary>
        /// Tworzy dokument na podstawie wcześniej przygotowanego pliku.
        /// </summary>
        /// <param name="fileName">Plik z danymi.</param>
        /// <param name="dictionary">Słownik, na podstawie którego tworzony jest dokument.</param>
        /// <param name="className">Nazwa klasy, do której należy dany dokument lub null, jeśli klasa jest nieznana.</param>
        /// <param name="learningDocInfo">Obiekt zawierający informacje o wszystkich dokumentach uczących.</param>
        public TfIdfDocument(String fileName, Dictionary dictionary, String className, LearningDocInfo learningDocInfo)
            : base(dictionary)
        {
            wordCountList = new WordCountList();
            if (className != null)
            {
                classNo = DocumentClass.GetClassIndex(className);
            }
            //tworze liste wszystkich słów ze wszystkuch dokumentów
            Dictionary <String, WordInfo> allWordsInfo = learningDocInfo.AllWordsInfo;
            double allDocNumber = learningDocInfo.AllDocCount;
            //tworze liste słów w dokumencie
            WordCountList wordsInDoc = new WordCountList(fileName);

            int wordsInDocCount = wordsInDoc.GetAllWordsCount();

            foreach (String word in dictionary)
            {
                if (wordsInDoc[word] != -1)
                {
                    double inclDocCount = allWordsInfo[word].InclDocCount;
                    //double tfIdf = (wordsInDoc[word] / wordsInDocCount) * Math.Log10(allDocNumber/inclDocCount);
                    double tfIdf = PreprocessingUtility.ComputeTfIdf(wordsInDoc[word], wordsInDocCount, allDocNumber, inclDocCount);
                    wordCountList.Add(new WordCountPair(word, tfIdf));
                }
                else
                {
                    wordCountList.Add(new WordCountPair(word, 0));
                }
            }
        }