Пример #1
0
        private Double FindAngle(Termpack doc, String[] request) {
            List<String> reuqestList = new List<string>(request);
            List<Int32> docVector = new List<int>();
            List<Int32> requestVector = new List<int>();

            // Формирование векторов
            foreach (var term in reuqestList) {
                docVector.Add(doc.terms.FindAll(x => x == term).Count());
                requestVector.Add(reuqestList.FindAll(x => x == term).Count());
            }

            // Вычисление угла
            // Скалярное произведение
            Double scalar = 0;
            for (int i = 0; i < docVector.Count; i++) {
                scalar += docVector[i]*requestVector[i];
            }
            // Модули векторов
            Double modules = 0, docMod = 0, reqMod = 0;
            for (int i = 0; i < docVector.Count; i++) {
                docMod = docVector[i] * docVector[i];
                reqMod = requestVector[i] * requestVector[i];
            }
            docMod = Math.Sqrt(docMod);
            reqMod = Math.Sqrt(reqMod);
            modules = docMod*reqMod;

            Double res;
            if (modules == 0)
                res = 0;
            else
                res = scalar / modules;

            return res;
        }
Пример #2
0
        // конструктор перебирает файлы из директории directory и фиормирует массив термпаков
        public Infsearch() {
            String[] filenames = Directory.GetFiles(directory);
            foreach (var name in filenames) {
                var termpack = new Termpack();
                String line;
                StreamReader sr = File.OpenText(name);

                termpack.Name = name;
                while (sr.Peek() >= 0) {
                    line = sr.ReadLine(); // построчно считываем файл
                    String[] termarray = LineToTermarray(line);
                    termpack.terms.AddRange(termarray);
                }

                termpacks.Add(termpack);
            }
        }