class NLC(object): def __init__(self, credential_file_path=None): self.__nlc = None self.__initialize(credential_file_path) def __initialize(self, credential_file_path): if not credential_file_path: credential_file_path = os.path.expanduser(DEFAULT_CREDENTIAL_PATH) with open(credential_file_path, 'r') as credential_file: credential = json.load(credential_file) self.__nlc = NaturalLanguageClassifier(url=credential['url'], username=credential['username'], password=credential['password']) def create(self, traning_data, name=None, language='en'): """ :param traning_data: A csv file or file path representing the traning data :param name: The optional descriptive name for the classifier :param language: The language og the input data :return: A instance object with the classifier_id of the newly created classifier, still in traning """ create_result = None if isinstance(traning_data, file) or isinstance(traning_data, IOBase): # traning_data is file discripter create_result = self.__nlc.create(traning_data, name=name, language=language) elif isinstance(traning_data, str): # traning_data is file path with open(traning_data, newline=None, mode='r', encoding='utf-8') as csv_file: if is_valid_recode_num(csv_file): create_result = self.__nlc.create(csv_file, name=name, language=language) return CreateResult(create_result) def classifiers(self): classifiers_raw = self.__nlc.list() classifiers_ = [Classifier(c) for c in classifiers_raw['classifiers']] return Classifiers(classifiers_) def status(self, classifier_id): return Status(self.__nlc.status(classifier_id)) def classify(self, classifier_id, text): return ClassifyResult(self.__nlc.classify(classifier_id, text)) def remove(self, classifier_id): """ param: classifier_id: Unique identifier for the classifier retrun: empty dict object raise: watson_developer_cloud.watson_developer_cloud_service.WatsonException: Not found """ return self.__nlc.remove(classifier_id) def remove_all(self): classifiers_ = self.classifiers() return [self.remove(c.classifier_id) for c in classifiers_]
import json from os.path import join, dirname from watson_developer_cloud import NaturalLanguageClassifierV1 as NaturalLanguageClassifier natural_language_classifier = NaturalLanguageClassifier( username='******', password='******') classifiers = natural_language_classifier.list() print(json.dumps(classifiers, indent=2)) # create a classifier # with open('../resources/weather_data_train.csv', 'rb') as training_data: # print(json.dumps(natural_language_classifier.create(training_data=training_data, name='weather2'), indent=2)) # replace 47C164-nlc-243 with your classifier id status = natural_language_classifier.status('47C164-nlc-243') print(json.dumps(status, indent=2)) classes = natural_language_classifier.classify('47C164-nlc-243', 'How hot will it be tomorrow?') print(json.dumps(classes, indent=2))
import json from os.path import join, dirname from watson_developer_cloud import NaturalLanguageClassifierV1 as NaturalLanguageClassifier natural_language_classifier = NaturalLanguageClassifier(username='******', password='******') print(json.dumps(natural_language_classifier.list(), indent=2)) # create a classifier # with open('../resources/weather_data_train.csv', 'rb') as training_data: # print(json.dumps(natural_language_classifier.create(training_data=training_data, name='weather2'), indent=2)) # replace 47C164-nlc-243 with your classifier id status = natural_language_classifier.status('47C164-nlc-243') print (json.dumps(status, indent=2)) classes = natural_language_classifier.classify('47C164-nlc-243', 'How hot will it be tomorrow?') print(json.dumps(classes, indent=2))
def classifier_list(url, username, password): connection = NaturalLanguageClassifier(url=url, username=username, password=password) return connection.list()["classifiers"]
import json from watson_developer_cloud import NaturalLanguageClassifierV1 as NaturalLanguageClassifier natural_language_classifier = NaturalLanguageClassifier( username='******', password='******') classifiers = natural_language_classifier.list() print(json.dumps(classifiers, indent=2))
class NLClassifier(object): def __init__(self, username, password, classifier): # Setup Watson SDK self.natural_language_classifier = NLC(username=username, password=password) # Classifier information self.classifier = {} self.classifier['name'] = classifier['name'] self.classifier['training_file'] = classifier['training_file'] c = self.natural_language_classifier.list() if any(d['name'] == self.classifier['name'] for d in c['classifiers']): self.classifier['id'] = [ d['classifier_id'] for d in c['classifiers'] if d['name'] == self.classifier['name'] ][0] print 'Found classifier id %s ' % self.classifier['id'] self.classifier[ 'status'] = self.natural_language_classifier.status( self.classifier['id'])['status'] else: print 'No classifier found, creating new from training set' self.classifier['id'] = self.create_classifier() print 'New classifier id: %s ' % self.classifier['id'] ### Method to train the Watson Natural Language Classifier # The training set is delivered as a CSV file as specified in the Developer Guide # https://www.ibm.com/watson/developercloud/doc/nl-classifier/data_format.shtml def create_classifier(self): training_data = open(self.classifier['training_file'], 'rb') training_result = self.natural_language_classifier.create( training_data=training_data, name=self.classifier['name']) if training_result['status'] == "Training": self.classifier['status'] = "Training" return training_result['classifier_id'] else: print training_result return "Error" def classify(self, text): # Typically in a production system Watson NLC will be fully trained and verified by a data scientist before the system is ever # exposed in production. However because this is a demo application where Watson NLC is trained at application deployment time, # we will need to have a check to verify that the training is completed. if self.classifier['status'] == "Training": r = self.natural_language_classifier.status(self.classifier['id']) if r['status'] == "Training": return { "error": "Classifier still in training. Please try again in a few minutes." } elif r['status'] == "Available": self.classifier['status'] = 'Available' else: return { "error": "Unknown status for classifier", "message": r['status'] } return self.natural_language_classifier.classify( self.classifier['id'], text)
import json from os.path import join, dirname from watson_developer_cloud import NaturalLanguageClassifierV1 as NaturalLanguageClassifier natural_language_classifier = NaturalLanguageClassifier( username='******', password='******') print(json.dumps(natural_language_classifier.list(), indent=2)) # create a classifier # with open('../resources/weather_data_train.csv', 'rb') as training_data: # print(json.dumps(natural_language_classifier.create(training_data=training_data, name='weather2'), indent=2)) # replace 47C164-nlc-243 with your classifier id status = natural_language_classifier.status('47C164-nlc-243') print(json.dumps(status, indent=2)) classes = natural_language_classifier.classify('47C164-nlc-243', 'How hot will it be tomorrow?') print(json.dumps(classes, indent=2))