Skip to content

Instantly share code, notes, and snippets.

@generall
Created October 17, 2016 19:47
Show Gist options
  • Save generall/42e28f67ee01078b7ebf7861ccb52963 to your computer and use it in GitHub Desktop.
Save generall/42e28f67ee01078b7ebf7861ccb52963 to your computer and use it in GitHub Desktop.
# Common analizer interface
class TSemanticAnaliser
def analise_text(text)
# returns double
end
def learn(array_of_texts)
end
end
class TBayesSemanticAnalizer < TSemanticAnaliser
# Implementation of interface
def analise_text(text)
# implementation here
end
# Implementation of interface
def learn(array_of_texts)
# actual learning here
end
end
# какая-то имплементация анализатора, которая реализует общий интерфейс
class MyCustomAnalizer < TSemanticAnaliser
# Implementation of interface
def analise_text(text)
# implementation here
end
# Implementation of interface
def learn(array_of_texts)
# actual learning here
end
end
# класс, который производит мажоритарное голосование среди всех классификаторов
class MajorityUnit
# analizer - что-то, реализующее TSemanticAnaliser
def add_analizer(analizer)
@analizers.push(analizer)
end
def classify(text)
@analizers.map{|analizer| analizer.analise_text(text)}.reduce(&:+)
end
def learn_all()
@analizers.each(&:learn)
end
end
# класс, который производит взвешенное мажоритарное голосование среди всех классификаторов
class WeightedMajorityUnit < MajorityUnit
# analizer - что-то, реализующее TSemanticAnaliser
def add_analizer(analizer, weight)
@analizers.push([analizer, weight])
end
def classify(text)
@analizers.map{|analizer, weight| analizer.analise_text(text) * weight}.reduce(&:+)
end
# здесь learn_all не надо заново реализовывать, переиспользование кода, все такое
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment