Guest User

Untitled

a guest
Aug 28th, 2012
162
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 5.39 KB | None | 0 0
  1. using System.Collections.Generic;
  2. using System.Text;
  3. using System;
  4. using System.Linq;
  5. public class Song
  6. {
  7.     public List<string> nazev = new List<string>();
  8.     public List<string> title = new List<string>();
  9.     public List<string> remix = new List<string>();
  10.  
  11.     public Song(string song)
  12.     {
  13.         string n, t, r;
  14.         ManazerNazvuMedii.ci.VratMiNazevTitleRemix(song, out n, out t, out r);
  15.         this.nazev.AddRange(SplitNazevTitle(n));
  16.         this.title.AddRange(SplitNazevTitle(t));
  17.         this.remix.AddRange(SplitRemix(r));
  18.  
  19.         //if (this.remix.Count != 0)
  20.         //{
  21.  
  22.         //}
  23.     }
  24.  
  25.     internal float CalculateSimilarity(string p)
  26.     {
  27.         Song s = new Song(p);
  28.         int psn, prn, pst, prt, psr, prr;
  29.         VratPocetStejnychARozdilnych(s.nazev, this.nazev, out psn, out prn);
  30.         VratPocetStejnychARozdilnych(s.title, this.title, out pst, out prt);
  31.         VratPocetStejnychARozdilnych(s.remix, this.remix, out psr, out prr);
  32.  
  33.         float n = CalculateSimilarity(psn, prn, s.nazev, this.nazev);
  34.         float t = CalculateSimilarity(pst, prt, s.title, this.title);
  35.         float r = CalculateSimilarity(psr, prr, s.remix, this.remix);
  36.  
  37.         float vr = (n + t) / 2;
  38.         //if (vr > 0.66f)
  39.         //{
  40.         //    if (vr == 1)
  41.         //    {
  42.  
  43.         //    }
  44.         //    return vr;
  45.         //}
  46.         //
  47.         if (vr == 1)
  48.         {
  49.             vr = (n + t + r) / 3;
  50.         }
  51.         return vr;
  52.     }
  53.  
  54.     private float CalculateSimilarity(int psn, int prn, List<string> novy, List<string> puvodni)
  55.     {
  56.         if (psn == prn && psn == 0)
  57.         {
  58.             return 1.0f;
  59.         }
  60.         if (psn > prn)
  61.         {
  62.             //prn == 1 ||
  63.             if (prn == 0)
  64.             {
  65.                 int uy = 0;
  66.                 for (int i = 0; i < novy.Count; i++)
  67.                 {
  68.                     if (puvodni.Contains(novy[i]))
  69.                     {
  70.                         uy++;
  71.                     }
  72.                 }
  73.                 if (uy == novy.Count)
  74.                 {
  75.                     return 1.0f;
  76.                 }
  77.                 //return 1.0f;
  78.                 return (1f / 3f) * 2f;
  79.             }
  80.             if (prn != 0)
  81.             {
  82.                 if (prn != 1)
  83.                 {
  84.  
  85.                     return psn / prn;    
  86.                 }
  87.                 if (psn > 3)
  88.                 {
  89.                     float vr = (psn - prn) / 2f;
  90.                    
  91.                     return vr;
  92.                 }
  93.                 else
  94.                 {
  95.                     float vr = (psn - ((float)psn / ((float)psn - 1f))) / 2;
  96.                     int uy = 0;
  97.                     for (int i = 0; i < novy.Count; i++)
  98.                     {
  99.                         if (puvodni.Contains(novy[i]))
  100.                         {
  101.                             uy++;
  102.                         }
  103.                     }
  104.                     if (uy > 0)
  105.                     {
  106.                         vr = (float)uy / (float)prn / 2f;
  107.                     }
  108.                     if (vr > 0.99f)
  109.                     {
  110.                         vr = vr / 2f;
  111.                     }
  112.                     return vr;
  113.                 }
  114.                 //return 0.5f;
  115.             }
  116.            
  117.            
  118.             return 0f;
  119.         }
  120.         if (psn + 1 > prn && psn < 3)
  121.         {
  122.             return 0.5f;
  123.         }
  124.        
  125.         return 0f;
  126.  
  127.     }
  128.  
  129.     private void VratPocetStejnychARozdilnych(List<string> list, List<string> list_2, out int psn, out int prn)
  130.     {
  131.         List<string> l1 = new List<string>(list.ToArray());
  132.         List<string> l2 = new List<string>(list_2.ToArray());
  133.         psn = 0;
  134.  
  135.  
  136.         for (int i = l1.Count - 1; i >= 0; i--)
  137.         {
  138.             int dex = l2.IndexOf(l1[i]);
  139.             if (dex != -1)
  140.             {
  141.                 l1.RemoveAt(i);
  142.                 l2.RemoveAt(dex);
  143.                 psn++;
  144.             }
  145.         }
  146.  
  147.         prn = (l1.Count + l2.Count) ;
  148.     }
  149.  
  150.     public override string ToString()
  151.     {
  152.         StringBuilder vr = new StringBuilder();
  153.         vr.Append(JoinSpace(nazev) + "-" + JoinSpace(title));
  154.         if (remix.Count != 0)
  155.         {
  156.             vr.Append(" [" + JoinSpace(remix) + "]");
  157.         }
  158.         return vr.ToString();
  159.     }
  160.  
  161.     private IEnumerable<string> SplitRemix(string u)
  162.     {
  163.         //return u.Split(new string[] { " ", "[", "]", "(", ")" }, StringSplitOptions.RemoveEmptyEntries).All(g => g.ToLower()); ;
  164.  
  165.         List<string> gg = u.Split(new string[] { " ", "[", "]", "(", ")" }, StringSplitOptions.RemoveEmptyEntries).ToList();
  166.         //gg.ForEach(g => g.ToLower());
  167.         for (int i = 0; i < gg.Count; i++)
  168.         {
  169.             gg[i] = gg[i].ToLower();
  170.         }
  171.         return gg;
  172.     }
  173.  
  174.     private IEnumerable<string> SplitNazevTitle(string u)
  175.     {
  176.         List<string> gg = u.Split(new string[] { " " }, StringSplitOptions.RemoveEmptyEntries).ToList();
  177.         //gg.ForEach(g => g.ToLower());
  178.         for (int i = 0; i < gg.Count; i++)
  179.         {
  180.             gg[i] = gg[i].ToLower();
  181.         }
  182.         return gg;
  183.     }
  184.  
  185.     private string JoinSpace(List<string> nazev)
  186.     {
  187.         StringBuilder sb = new StringBuilder();
  188.         foreach (string item in nazev)
  189.         {
  190.             sb.Append(item + " ");
  191.         }
  192.         return sb.ToString().TrimEnd(' ');
  193.     }
  194. }
Advertisement
Add Comment
Please, Sign In to add comment