Herramienta de extracción de palabras (6): Herramienta de extracción de palabras Descripción adicional

Continuando con el artículo anterior, observamos la explicación adicional de la herramienta de extracción de palabras.

Herramienta de extracción de palabras (5): Descripción del código fuente de la herramienta de extracción de palabras (2)

5. Explicación adicional de la herramienta de extracción de palabras

5.1. ¿Por qué utilizar Automatización OLE?

OLE Aumation se define en Wikipedia de la siguiente manera.

En la programación de aplicaciones de Microsoft Windows, OLE Automation (más tarde rebautizado simplemente como Automatización[1][2]) es un mecanismo de comunicación entre procesos (IPC) desarrollado por Microsoft. Se basa en un subconjunto del Modelo de Objetos Componentes (COM) y estaba destinado a ser utilizado a través de un lenguaje de secuencias de comandos (originalmente Visual Basic), pero ahora está disponible a través de varios idiomas en Windows.

fuente: https://en.wikipedia.org/wiki/OLE_Automatización

En Python, la automatización OLE es posible utilizando el paquete win32com. Puede realizar las funciones deseadas controlando las aplicaciones de MS-Office.

OLE Automation using Python win32com package
Automatización OLE usando el paquete Python win32com

Se utilizó OLE Aumation para la herramienta de extracción de palabras por las siguientes razones.

  • Existen los siguientes paquetes dedicados que pueden leer y escribir MS-Word y PowerPoint, pero no los usé a propósito.
    • MS-Word: python-docx, python-docx2txt
    • PowerPoint: python-pptx
    • Excel: openpyxl, xlsxwriter, pyxlsb
  • La mayoría de los entornos corporativos fuerzan la instalación de software DRM, por lo que los archivos de documentos están encriptados.
  • Los archivos cifrados no se pueden leer si se utiliza un paquete dedicado.
  • Si usa el método de automatización OLE con el paquete pywin32, puede leer el archivo a través del programa de Office.
  • Puede perder algo de rendimiento con OLE Automation, pero los resultados están garantizados.

Para los códigos de Python que controlan MS-Word, PowerPoint y Excel, consulte el siguiente artículo.

5.2. Relacionado con la codificación de archivos de texto (solo se admite UTF-8)

  • La codificación del archivo de texto de entrada está diseñada para admitir solo UTF-8.
  • Si el archivo de texto entre los archivos de entrada tiene codificación ANSI, se producirá el siguiente error porque tiene codificación cp949 y no Unicode.
    • UnicodeDecodeError: el códec 'utf-8' no puede decodificar el byte 0xb4 en la posición 5: byte de inicio no válido
  • Si ocurre un error similar durante la ejecución, guarde el archivo de texto como UTF-8 y ejecútelo nuevamente.

5.3. Razones para usar multiprocesamiento

Publicación anterior "Herramienta de extracción de palabras (4): Descripción del código fuente de la herramienta de extracción de palabras (1)En “, se explicó el código que usa procesamiento múltiple.

4.2.3. Ejecute get_file_text con procesamiento múltiple

4.2.4. Ejecute get_word_list con procesamiento múltiple

Cuando se creó esta herramienta por primera vez, tanto la extracción de texto como la extracción de palabras eran de procesamiento único. Cuando se usó por primera vez en un proyecto de la empresa K a principios de 2021, se necesitaron unas 20 horas para extraer candidatos de palabras estándar de unas 160 000 columnas de comentarios en una computadora portátil (CPU i5, 16 GB de RAM).

Después de varias iteraciones, incluidas las pruebas, surgió la necesidad de acortar el tiempo de ejecución. Cuando busqué en Google para usar Thread para el procesamiento paralelo, decidí que el procesamiento múltiple es más adecuado que el subprocesamiento múltiple porque Python tiene el concepto de GIL (Global Interpreter Lock).

A través de una ligera modificación del código, se aplicó el procesamiento múltiple tanto a la extracción de texto como a la extracción de palabras, y se creó un argumento (multi_process_count) para especificar el grado de paralelismo durante la ejecución.

Cuando multi_process_count se estableció en 8 y se ejecutó, la tarea que tomó 20 horas se acortó a aproximadamente 40 minutos y fue lo suficientemente efectiva.


5.4. Notas sobre la extracción de palabras compuestas

La descripción de sustantivos, pos y morfos entre las principales funciones de Mecab es la siguiente.

funciónExplicación
sustantivos (texto)Analiza el texto, extrae solo los sustantivos y devuelve una lista
posición (texto)Analiza el texto y devuelve una lista de formas (morfemas, partes del discurso, etiquetas)
se transforma (texto)Analiza el texto, extrae solo los morfemas y devuelve una lista

El resultado de la ejecución de cada función es el ejemplo de la cadena de entrada a continuación.

* Cadena de entrada: el usuario define los requisitos funcionales y no funcionales.

funciónresultado de ejecución
sustantivos (texto)['uso', 'capacidades', 'requisitos', 'activos', 'características', 'requisitos', 'activos', 'definiciones']
posición (texto)[('habilitar', 'NNG'), ('carácter', 'XSN'), ('es', 'JX'), ('característica', 'NNG'), ('rojo', 'XSN') , ('demanda', 'NNG'), ('asunto', 'NNG'), ('y', 'JC'), ('no', 'XPN'), ('característica', 'NNG') ; , ('debería', 'XSV+EF'), ('.', 'SF')]
se transforma (texto)['usar', 'usuario', 'es', 'característica', 'némesis', 'solicitud', 'especificación', 'y', 'no', 'característica', 'némesis', 'solicitud', ' importa', 'a', 'definir', 'debería', '.']

* Cadena de entrada: la estandarización de datos es un área importante de la construcción de arquitectura de datos.

funciónresultado de ejecución
sustantivos (texto)['datos', 'estándares', 'datos', 'arquitectura', 'construcción', 'crítico', 'área']
posición (texto)[('datos', 'NNG'), ('estándar', 'NNG'), ('martes', 'XSN'), ('es', 'JX'), ('datos', 'NNG') , ('arquitectura', 'NNG'), ('construir', 'NNG'), ('de', 'JKG'), ('importante', 'NNG'), ('uno', 'XSA+ETM '), ('región', 'NNG'), ('este', 'VCP'), ('da', 'EF'), ('.', 'SF')]
se transforma (texto)['Datos', 'Estándar', 'Campo', 'A', 'Datos', 'Arquitectura', 'Construcción', 'De', 'Importante', 'Uno', 'Región', 'Este', ' todo', '.']

La herramienta de extracción de palabras no utiliza directamente la función de sustantivos, sino que extrae palabras aplicando una expresión regular al resultado de la función pos. A continuación se muestra una explicación del patrón de expresión regular.

Patrón usando expresión regular: '(NNP/|NNG/)+(XSN/)*|(XPN/)+(NNP/|NNG/)+(XSN/)*|(SL/)+'

  • Este patrón encuentra una de tres cosas:
    • (NNP/|NNG/)+(XSN/)*: 1 o más (nombre propio o nombre común) (obligatorio) + 0 o más sufijos derivados de sustantivos (opcional)
    • (XPN/)+(NNP/|NNG/)+(XSN/)*: 1 o más prefijos (obligatorio) + 1 o más (nombres propios o comunes) (obligatorio) + 0 o más sufijos derivados de sustantivos (opcional) )
    • (SL/)+: Al menos un idioma extranjero (requerido)

Ejemplos de extracción de solo sustantivos llamando a sustantivos (texto) y extracción de palabras compuestas adicionales mediante la aplicación de expresiones regulares son los siguientes:

* Cadena de entrada: el usuario define los requisitos funcionales y no funcionales.

funciónresultado de ejecución
Extraer solo sustantivos
sustantivos (texto)
uso, función, necesidad, materia, función, necesidad, materia, definición
Aplicar expresión regularuso, función, necesidad, requisito, función, requisito, requisito, definición, usuario[compuesto], funcional[compuesto], requisito[compuesto], no funcional[compuesto], requisito[compuesto]

* Cadena de entrada: la estandarización de datos es un área importante de la construcción de arquitectura de datos.

funciónresultado de ejecución
Extraer solo sustantivos
sustantivos (texto)
datos, estándar, datos, arquitectura, construcción, importante, área
Aplicar expresión regularDatos, estándar, datos, arquitectura, construcción, importante, dominio, estandarización de datos [compuesto], construcción de arquitectura de datos [compuesto]

La razón para extraer adicionalmente la palabra compuesta es evitar problemas en caso de que la palabra compuesta se agregue más tarde revisando si se debe registrar la palabra compuesta como estándar en la etapa inicial de construcción del diccionario de palabras estándar.

Si se agrega una palabra compuesta más tarde, se puede cambiar el nombre físico del término estándar que usa las palabras individuales que constituyen la palabra compuesta, e incluso es posible que se deba cambiar el nombre de la tabla y el nombre de la columna de la base de datos usando el término estándar.

Por supuesto, existe un método para cambiar solo el nombre físico del término estándar que se creará en el futuro sin cambiar el nombre físico del término estándar que ya se ha creado recomendado desde una perspectiva a largo plazo.

No es una decisión fácil cambiar el nombre físico de un término estándar que ya se ha creado. Si el desarrollo ya está en curso, debe proceder a cambiar el código fuente que hace referencia a la columna cuyo nombre se ha cambiado. Los proyectos que requieren cronogramas adicionales e involucran a múltiples partes interesadas pueden estar sujetos a rendición de cuentas.

Teniendo en cuenta que una gran cantidad de cambios en el código fuente pueden tener un gran impacto en el proyecto y pueden ser bastante difíciles, revisar palabras compuestas en la etapa inicial de establecer un diccionario estándar es un proceso necesario.

No había forma de identificar candidatos a palabras compuestas conociendo el impacto, y esta herramienta de extracción de palabras proporciona un método adecuado.

Puede que no sea óptimo, pero creo que es suficiente como alternativa en el momento actual.

5.5. Tipos de analizadores morfológicos partes del discurso.

Publicación anterior Herramienta de extracción de palabras (5): Descripción del código fuente de la herramienta de extracción de palabras (2) de 4.4._get_word_list_function tenía el siguiente contenido:

  • Línea 64: Ejecute el etiquetado de parte del discurso del analizador de morfemas con la función pos. Separaré los contenidos relacionados con el etiquetado de parte del discurso.
    • La función de etiquetado de partes del discurso pos descompone la cadena de entrada en unidades de partes del discurso y devuelve una cadena en la que se etiqueta cada unidad.
    • Por ejemplo, si el texto es 'Los usuarios definen requisitos funcionales y no funcionales', el resultado de la ejecución de la función pos es '[('usar', 'NNG'), ('carácter', 'XSN'), (' es', 'JX'), ('función', 'NNG'), ('enemigo', 'XSN'), ('solicitud', 'NNG'), ('spec', 'NNG' '), ( 'y', 'JC'), ('b', 'XPN'), ('característica', 'NNG'), ('enemigos', 'XSN'), ('solicitud', 'NNG'), ( 'cosa', 'NNG'), ('a', 'JKO'), ('definición', 'NNG'), ('debería', 'XSV+EF'), ('.', 'SF') ]'.
    • Entre las partes del discurso etiquetadas en el ejemplo anterior, 'NNG' es un sustantivo común, 'XSN' es un sufijo derivado de un sustantivo, 'JX' es un auxiliar, 'JC' es una partícula conectiva, 'XPN' es un prefijo , 'JKO' es una partícula objetiva, ' XSV + EF' es un sufijo derivado de un verbo + terminación final, y 'SF' significa un punto/signo de interrogación/exclamación.

Las etiquetas de partes del discurso proporcionadas por Mecab están organizadas en el siguiente documento.

https://docs.google.com/spreadsheets/d/1-9blXKjtjeKZqsf4NzHeYJCrr49-nXeRF6D80udfcwY/edit#gid=589544265

A continuación se resumen extractos del documento anterior.

significado sustancialCategoría principal (5 palabras + otras)Sejong etiquetas de partes del discursomecab-en-dic partes de la etiqueta del discurso
etiquetaExplicaciónetiquetaExplicación
morfema sustantivoCheonNNGsustantivo comúnNNGsustantivo común
PNNnombre propioPNNnombre propio
NNBsustantivo dependienteNNBsustantivo dependiente
NNBCsustantivo que denota una unidad
NRInvestigaciónNRInvestigación
notario públicopronombrenotario públicopronombre
verbovvverbovvverbo
VirginiaadjetivoVirginiaadjetivo
VXverbo auxiliarVXverbo auxiliar
PCVespecificador positivoPCVespecificador positivo
VCNespecificador negativoVCNespecificador negativo
modificadormilímetrodetectivemilímetrodetective
REVISTAadverbio comúnREVISTAadverbio común
COMANDANTEadverbio de conjunciónCOMANDANTEadverbio de conjunción
idioma independienteCIinterjecciónCIinterjección
morfema formalpalabra relativaJKSinvestigación nominativaJKSinvestigación nominativa
JKCinvestigación a distanciaJKCinvestigación a distancia
JKGinvestigación del caso del ataúdJKGinvestigación del caso del ataúd
J.K.O.investigación de objetosJ.K.O.investigación de objetos
JKBinvestigacion secundaria de incendiosJKBinvestigacion secundaria de incendios
JKVinvestigación vocativaJKVinvestigación vocativa
JKQverificación de citasJKQverificación de citas
JXauxiliarJXauxiliar
JCinvestigación de conexiónJCinvestigación de conexión
caballo fresco maternalEPcaballo fresco maternalEPcaballo fresco maternal
final de palabraFEfinal finalFEfinal final
CEterminación conectivaCEterminación conectiva
ETNterminación de la forma del sustantivoETNterminación de la forma del sustantivo
ETMterminación tubular maleable ETMterminación tubular maleable
prefijoXPNprefijo de cadenaXPNprefijo de cadena
sufijoXSNsufijo de derivación del sustantivoXSNsufijo de derivación del sustantivo
XSVsufijo de derivación verbalXSVsufijo de derivación verbal
XSAsufijo de derivación de adjetivoXSAsufijo de derivación de adjetivo
 baseXRbaseXRbase
firmarSFpunto final, signo de interrogación, Signo de exclamaciónSFpunto final, signo de interrogación, Signo de exclamación
SEelipsisSEelipsis
SScita,paréntesis,linea punteadainicio de sesión únicoparéntesis abierto (, [
SSCparéntesis de cierre ), ]
SPdescansar,Punto Medio,colon,barra oblicuaCAROLINA DEL SURSeparador , · / :
ENTONCESguión(ola,ocultación,desaparecido)SY 
SUDOESTEOtros símbolos (símbolos matemáticos lógicos,símbolo de moneda)
aparte de coreanoSLIdioma extranjeroSLIdioma extranjero
SHpersonaje chinoSHpersonaje chino
número de serienúmeronúmero de serienúmero

Con esto concluye el artículo sobre la herramienta de extracción de palabras. Si agrego o mejoro una característica, escribiré un artículo separado.


<< Lista de artículos relacionados >>

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

es_ESEspañol