예제 #1
0
파일: point.py 프로젝트: evolaemp/kalakukko
    def get_swadeshness_by_nearest(self, word_matrix, k):
        """
		Calculates the swadeshness of the k languages nearest to the language
		which is nearest to the point. Only the distances between that nearest
		language (the origin) and each of the others are taken into account. 
		The parameter k must be positive integer.
		"""
        globe = Map()

        languages = globe.get_nearest(self.latitude, self.longitude, k + 1)

        if len(languages) == 0:
            return None, {}, 0
        if len(languages) == 1:
            return languages[0], {}, 0

        origin = languages[0]
        languages = languages[1:]

        d = {}
        global_d, local_d = [], []

        for language in languages:
            distance_pair = word_matrix.get_distances(origin, language)
            if distance_pair is not None:
                d[language] = distance_pair
                global_d.append(distance_pair[0])
                local_d.append(distance_pair[1])

        p = get_correlation(global_d, local_d)

        return origin, d, p
예제 #2
0
    def calculate_on_neighbourhoods(self, word_matrix, k):
        """
		Calculates the swadeshness of each cell using the neighbourhood method.
		Cells with less than 6 relevant languages have swadeshness of 0.
		"""
        planet = Map()

        for cell in self.cells:
            try:
                languages = planet.get_nearest(cell[0], cell[1], k + 1)
            except MapError:
                cell.append(0)
                continue

            if len(languages) < 6:
                cell.append(0)
                continue

            origin = languages[0]
            languages = languages[1:]

            global_d, local_d = [], []
            for language in languages:
                distance_pair = word_matrix.get_distances(origin, language)
                if distance_pair is not None:
                    global_d.append(distance_pair[0])
                    local_d.append(distance_pair[1])

            cell.append(get_correlation(global_d, local_d))

        return self.cells
예제 #3
0
class MapTestCase(TestCase):
	fixtures = ['languages.json']
	
	def setUp(self):
		self.map = Map()
	
	
	def test_get_nearest(self):
		iberia = self.map.get_nearest(40, 0, 3)
		self.assertEqual(iberia, ['es', 'eu', 'pt'])
		
		elbrus = self.map.get_nearest(43, 42, 8)
		self.assertEqual(elbrus, [
			'ab', 'os', 'ka', 'ady', 'ddo', 'ce', 'hy', 'dar'
		])
	
	
	@given(
		floats(min_value=-90.0, max_value=90.0),
		floats(min_value=-180.0, max_value=180.0),
		integers(min_value=1, max_value=42)
	)
	def test_get_nearest_returns(self, latitude, longitude, k):
		try:
			lang = self.map.get_in_radius(latitude, longitude, k)
		except Exception as error:
			self.assertIsInstance(error, MapError)
		else:
			self.assertIs(type(lang), set)
	
	
	def test_get_single_nearest(self):
		iberia = self.map.get_single_nearest(40, 0, 500)
		self.assertEqual(iberia, 'es')
		
		elbrus = self.map.get_single_nearest(43, 42, 500)
		self.assertEqual(elbrus, 'ab')
		
		iceland = self.map.get_single_nearest(65, -22, 500)
		self.assertEqual(iceland, 'is')
		
		volga = self.map.get_single_nearest(55, 50, 500)
		self.assertEqual(volga, 'tt')
		
		andes = self.map.get_single_nearest(-15, -70, 500)
		self.assertEqual(andes, None)
	
	
	@given(
		floats(min_value=-90.0, max_value=90.0),
		floats(min_value=-180.0, max_value=180.0),
		integers(min_value=1, max_value=5000)
	)
	def test_get_single_nearest_returns(self, latitude, longitude, radius):
		try:
			lang = self.map.get_single_nearest(latitude, longitude, radius)
		except Exception as error:
			self.assertIsInstance(error, MapError)
		else:
			try:
				self.assertIs(type(lang), str)
			except AssertionError:
				self.assertIsNone(lang)
	
	
	def test_get_in_radius(self):
		iceland = self.map.get_in_radius(65, -22, 1000)
		self.assertEqual(iceland, set(['is']))
		
		volga = self.map.get_in_radius(55, 50, 1000)
		self.assertEqual(volga, set([
			'ba', 'cv', 'mdf', 'mhr', 'myv', 'tt', 'udm'
		]))
		
		andes = self.map.get_in_radius(-15, -70, 1000)
		self.assertEqual(andes, set())
	
	
	@given(
		floats(min_value=-90.0, max_value=90.0),
		floats(min_value=-180.0, max_value=180.0),
		integers(min_value=1, max_value=5000)
	)
	def test_get_in_radius_returns(self, latitude, longitude, radius):
		try:
			lang = self.map.get_in_radius(latitude, longitude, radius)
		except Exception as error:
			self.assertIsInstance(error, MapError)
		else:
			self.assertIs(type(lang), set)