示例#1
0
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))
示例#4
0
def classifier_list(url, username, password):
    connection = NaturalLanguageClassifier(url=url, username=username, password=password)
    return connection.list()["classifiers"]
示例#5
0
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)
示例#8
0
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))