protected Location resolveLocationUsingUserLocation(Map<String,Object> tweet) {
		String tweetLocation = Utils.getLocationFromTweet(tweet);
		if (tweetLocation != null) {
			String location = tweetLocation.replaceAll("\\p{Punct}", " ").replaceAll("\\s+", " ").toLowerCase().trim();
			
			// Check if this is a known location
			if (this.locationNameToLocation.containsKey(location)) {
				return this.locationNameToLocation.get(location);
			}
			
			// Look for patterns in the location. Replace punctuation but keep ","
			String locationWithComma = tweetLocation.replaceAll("[!\\\"#$%&'\\(\\)\\*\\+-\\./:;<=>\\?@\\[\\\\]^_`\\{\\|\\}~]", " ").replaceAll("\\s+", " ").toLowerCase().trim();
			
			Matcher matcher = this.statePattern .matcher(locationWithComma);
			if (matcher.matches()) 	{
				// extracting the state name or country name of location strings, if available
				String matchedString = matcher.group(1).toLowerCase();
				String stateOrCountryName = null;
				if (stateFullNames.contains(matchedString) || countryFullNames.contains(matchedString)) 
					stateOrCountryName = matchedString;
				else if (stateAbbreviationToFullName.containsKey(matchedString)) 
					stateOrCountryName = stateAbbreviationToFullName.get(matchedString);
				else if (countryAbbreviationToFullName.containsKey(matchedString)) 
					stateOrCountryName = countryAbbreviationToFullName.get(matchedString);
			
				if (stateOrCountryName != null && this.locationNameToLocation.containsKey(stateOrCountryName)) {
					return this.locationNameToLocation.get(stateOrCountryName);
				}
			}
		}
			
		return null;
	}