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; }
// конструктор перебирает файлы из директории 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); } }