Source code for lcc.stars_processing.utilities.symbolic_representation

import abc

from lcc.stars_processing.utilities.sax import SAX
import numpy as np


[docs]class SymbolicRepresentation(object): ''' This common class for all descriptors based on symbolic representation of data. ''' __metaclass__ = abc.ABCMeta
[docs] def compareTwoStars(self, star, comp_star): """ Compare two stars according to a filter implementation Parameters ---------- star : `Star` instance Star to compare comp_star : `Star` instance Star to compare Returns ------- float Dissimilarity of two stars """ curve_len = np.max( [len(star.lightCurve.mag), len(comp_star.lightCurve.mag)]) if not self.slide or not hasattr(self, "getWords"): inspected_word = self.getWord(star) comp_word = self.getWord(comp_star) score = self._getDissmilarity(inspected_word, comp_word, curve_len) return score else: one_word, words = self.getWords(comp_star, star) return self._getDissmilaritySlide(one_word, words)
def _getWord(self, x, word_size, alphabet_size): self.sax = SAX(word_size, alphabet_size) return self.sax.to_letter_rep(x)[0] def _getDissmilaritySlide(self, sliding_word, words): ''' This method go through string curve of a star and trying to match filter sentence pattern. ''' best_score = 1e9 for word in words: score = self.sax.compare_strings(word, sliding_word) if score < best_score: best_score = score return best_score def _getDissmilarity(self, inspected_word, filter_word, curve_len): ''' This method go through string curve of a star and trying to match filter sentence pattern. ''' if not inspected_word or not filter_word: raise Exception("There are no words for comparing") shift = 0 # Case of shorter filter word then star word if (len(filter_word) < len(inspected_word)): word_a = filter_word word_b = inspected_word else: word_b = filter_word word_a = inspected_word a_word_size = len(word_a) b_word_size = len(word_b) # Shift shorter word thru longer word and look for match best_score = 99 while (a_word_size + shift <= b_word_size): word = word_b[shift:shift + a_word_size] score = self.sax.compare_strings(word, word_a) if (score < best_score): best_score = score shift += 1 if not self.slide: break return best_score