/// <summary>
        /// Parses the given file.
        /// </summary>
        /// <param name="pathToFile">The path of the file to parse.</param>
        /// <returns></returns>
        public static BigramMap ParseFile(string pathToFile)
        {
            BigramMap map = new BigramMap();

            string jsonString = "";

            using (FileStream reader = File.OpenRead(pathToFile))
                using (var zip = new GZipStream(reader, CompressionMode.Decompress, true))
                    using (var unzip = new StreamReader(zip))
                        while (!unzip.EndOfStream)
                        {
                            jsonString += unzip.ReadLine();
                        }

            var json = JObject.Parse(jsonString);

            foreach (KeyValuePair <string, JToken> app in json)
            {
                // ignore cardIds, only parse data of bigramMap
                if (app.Key.Equals("bigramMap"))
                {
                    var bigramArray = JArray.Parse(app.Value.ToString());

                    foreach (JObject bigramArrayEntry in bigramArray)
                    {
                        AddObjectToBigramMap(map, bigramArrayEntry);
                    }
                }
            }

            map.Sort();
            return(map);
        }
 /// <summary>
 /// Adds the given JSON array object to the bigram map.
 /// </summary>
 /// <param name="map">The bigram map.</param>
 /// <param name="bigramArrayEntry">The new bigram array entry.</param>
 private static void AddObjectToBigramMap(BigramMap map, JObject bigramArrayEntry)
 {
     foreach (KeyValuePair <string, JToken> entry in bigramArrayEntry)
     {
         string keyCard          = entry.Key;
         var    occurrencesArray = JArray.Parse(entry.Value.ToString());
         AddOccurrencesOfKeyCardToMap(map, keyCard, occurrencesArray);
     }
 }
        /// <summary>
        /// Add a occurances array of entries of a card to the bigram map.
        /// </summary>
        /// <param name="map">The bigram map.</param>
        /// <param name="keyCard">The key card.</param>
        /// <param name="occurrencesArray">The list of entris with the occurrences.</param>
        private static void AddOccurrencesOfKeyCardToMap(BigramMap map, string keyCard, JArray occurrencesArray)
        {
            string valCard = "";
            int    numOcc  = 0;

            foreach (JObject occObject in occurrencesArray)
            {
                foreach (KeyValuePair <string, JToken> occEntry in occObject)
                {
                    if (occEntry.Key.Equals("numOcc"))
                    {
                        numOcc = (int)occEntry.Value;
                    }
                    else if (occEntry.Key.Equals("cardId"))
                    {
                        valCard = (string)occEntry.Value;
                    }
                }
                map.Add(keyCard, valCard, numOcc);
            }
        }