Si tiene un conjunto fijo de términos que desea detectar, como una lista de nombres de productos u organizaciones, puede crear un diccionario. La coincidencia de diccionario es un proceso muy rápido y con un uso eficiente de los recursos.
Los diccionarios de Watson Natural Language Processing contienen prestaciones de coincidencia avanzadas que van más allá de una coincidencia de serie simple, lo que incluye:
- Los términos del diccionario pueden constar de una sola señal, por ejemplo rueda, o varias señales, por ejemplo, cinturón de seguridad.
- La coincidencia de términos de diccionario puede distinguir entre mayúsculas y minúsculas o no. Si se distingue entre mayúsculas y minúsculas, puede asegurarse de que los acrónimos, como ABS, no coincidan con términos del idioma normal, como abs que tienen un significado diferente.
- Puede especificar cómo consolidar las coincidencias cuando varias entradas del diccionario coinciden con el mismo texto. Dadas las dos entradas de diccionario, Watson y Watson Natural Language Processing, puede configurar qué entrada debe coincidir en "I like Watson Natural Language Processing": sólo Watson Proceso de lenguaje natural, ya que contiene Watson, o ambos.
- Puede especificar que coincida con el lema en lugar de enumerar todas las inflexiones. De este modo, la entrada del diccionario única ratón detectará tanto ratón como ratonera en el texto.
- Puede adjuntar una etiqueta a cada entrada de diccionario, por ejemplo Categoría de organización para incluir metadatos adicionales en la coincidencia.
Todas estas prestaciones se pueden configurar, por lo que puede elegir la opción correcta para su caso de uso.
Tipos de archivos de diccionario
Watson Natural Language Processing da soporte a dos tipos de archivos de diccionario:
Lista de términos (finaliza en
.dict
)Ejemplo de una lista de términos:
Arthur Allen Albert Alexa
Tabla (finaliza en
.csv
)Ejemplo de una tabla:
"label", "entry" "ORGANIZATION", "NASA" "COUNTRY", "USA" "ACTOR", "Christian Bale"
Puede utilizar varios diccionarios durante la misma extracción. También puede utilizar ambos tipos al mismo tiempo, por ejemplo, ejecutar una única extracción con tres diccionarios, una lista de términos y dos tablas.
Creación de archivos de diccionario
Empiece creando un directorio de módulos dentro del cuaderno. Se trata de un directorio dentro del sistema de archivos del cuaderno que se utilizará temporalmente para almacenar los archivos de diccionario.
Para crear archivos de diccionario en el cuaderno:
- Cree un directorio de módulo. Tenga en cuenta que el nombre de la carpeta del módulo no puede contener guiones, ya que esto causará errores.
import os import watson_nlp module_folder = "NLP_Dict_Module_1" os.makedirs(module_folder, exist_ok=True)
- Cree archivos de diccionario y almacénelos en el directorio del módulo. Puede leer una lista externa o un archivo CSV, o puede crear archivos de diccionario como:
# Create a term list dictionary term_file = "names.dict" with open(os.path.join(module_folder, term_file), 'w') as dictionary: dictionary.write('Bruce') dictionary.write('\n') dictionary.write('Peter') dictionary.write('\n') # Create a table dictionary table_file = 'Places.csv' with open(os.path.join(module_folder, table_file), 'w') as places: places.write("\"label\", \"entry\"") places.write("\n") places.write("\"SIGHT\", \"Times Square\"") places.write("\n") places.write("\"PLACE\", \"5th Avenue\"") places.write("\n")
Carga de los diccionarios y configuración de opciones de coincidencia
Los diccionarios se pueden cargar utilizando los siguientes métodos de ayuda.
- Para cargar un solo diccionario, utilice
watson_nlp.toolkit.rule_utils.DictionaryConfig (<dictionary configuration>)
- Para cargar varios diccionarios, utilice
watson_nlp.toolkit.rule_utils.DictionaryConfig.load_all([<dictionary configuration>)])
Para cada diccionario, debe especificar una configuración de diccionario. La configuración del diccionario es un diccionario Python, con los atributos siguientes:
Atributo | Valor | Descripción | Obligatorio |
---|---|---|---|
name |
serie | El nombre del diccionario | Sí |
source |
serie | La vía de acceso al diccionario, relativa a module_folder |
Sí |
dict_type |
archivo o tabla | Si el artefacto de diccionario es una lista de términos (archivo) o una tabla de correlaciones (tabla) | Núm. El valor predeterminado es archivo |
consolidate |
ContainedWithin (Mantener la coincidencia más larga y eliminar duplicados) / NotContainedWithin (Mantener la coincidencia más corta y eliminar duplicados) / ContainsButNotEqual (Mantener coincidencia más larga pero mantener coincidencias duplicadas) / ExactMatch (Eliminar duplicados) / LeftToRight (Mantener el intervalo de no solapamiento más largo del extremo izquierdo) | Qué hacer con las coincidencias de diccionario que se solapan. | Núm. El valor predeterminado es no consolidar las coincidencias. |
case |
exacto / sin distinción entre mayúsculas y minúsculas | La coincidencia debe ser exacta o bien no hacer distinción entre mayúsculas y minúsculas. | Núm. El valor predeterminado es coincidencia exacta. |
lemma |
True / False | Coincidencia de los términos del diccionario con los lemas del texto. El diccionario debe contener sólo formas de lema. Por ejemplo, añada mouse en el diccionario para que coincida con mouse y mice en el texto. No añada mice en el diccionario. Para comparar términos que constan de varias señales en el texto, separe los lemas de dichos términos en el diccionario mediante un carácter de espacio. |
Núm. El valor predeterminado es false. |
mappings.columns (columnas as attribute of correlaciones: {}) |
list [serie] | Lista de cabeceras de columna en el mismo orden que en la tabla csv | Sí, si dict_type: table |
mappings.entry (entrada as attribute of correlaciones: {}) |
serie | El nombre de la cabecera de columna que contiene la serie para que coincida con el documento. | Sí, si dict_type: table |
label |
serie | La etiqueta que se va a adjuntar a las coincidencias. | Nee |
Ejemplo de código
# Load the dictionaries
dictionaries = watson_nlp.toolkit.rule_utils.DictionaryConfig.load_all([{
'name': 'Names',
'source': term_file,
'case':'insensitive'
}, {
'name': 'places_and_sights_mappings',
'source': table_file,
'dict_type': 'table',
'mappings': {
'columns': ['label', 'entry'],
'entry': 'entry'
}
}])
Entrenamiento de un modelo que contiene diccionarios
Después de haber cargado los diccionarios, cree un modelo de diccionario y entrene el modelo utilizando el método RBR.train()
. En el método, especifique:
- El directorio del módulo
- El idioma de las entradas del diccionario
- Los diccionarios para utilizar
Ejemplo de código
custom_dict_block = watson_nlp.resources.feature_extractor.RBR.train(module_folder,
language='en', dictionaries=dictionaries)
Aplicación del modelo en datos nuevos
Después de haber entrenado los diccionarios, aplique el modelo en los datos nuevos utilizando el método run()
, tal como se utilizaría en cualquiera de los bloques entrenados previamente existentes.
Ejemplo de código
custom_dict_block.run('Bruce is at Times Square')
Ejemplo de salida de código:
{(0, 5): ['Names'], (12, 24): ['SIGHT']}
Para mostrar las etiquetas o el nombre del diccionario:
RBR_result = custom_dict_block.executor.get_raw_response('Bruce is at Times Square', language='en')
print(RBR_result)
Salida que muestra las etiquetas:
{'annotations': {'View_Names': [{'label': 'Names', 'match': {'location': {'begin': 0, 'end': 5}, 'text': 'Bruce'}}], 'View_places_and_sights_mappings': [{'label': 'SIGHT', 'match': {'location': {'begin': 12, 'end': 24}, 'text': 'Times Square'}}]}, 'instrumentationInfo': {'annotator': {'version': '1.0', 'key': 'Text match extractor for NLP_Dict_Module_1'}, 'runningTimeMS': 3, 'documentSizeChars': 32, 'numAnnotationsTotal': 2, 'numAnnotationsPerType': [{'annotationType': 'View_Names', 'numAnnotations': 1}, {'annotationType': 'View_places_and_sights_mappings', 'numAnnotations': 1}], 'interrupted': False, 'success': True}}
Tema principal: Crear sus propios modelos