Colección de citas famosas - Colección de firmas - Cómo utilizar el sistema de segmentación de palabras ictclas para la segmentación de palabras

Cómo utilizar el sistema de segmentación de palabras ictclas para la segmentación de palabras

El sistema de segmentación de palabras ICTCLAS es un sistema NB. Lo he probado con atención estos días y es muy eficaz. La eficiencia del algoritmo de segmentación de palabras es muchas veces mayor que la de mi propio diccionario y también es muy simple de usar. BOSS necesita exportar una biblioteca de vocabulario personalizada y luego usar artículos para la capacitación. Funciona de todos modos. DT ha estado utilizando hashing con éxito durante dos semanas y el progreso es muy lento. Analice un libro "Ocho ramas de la vena del dragón" y cuente la frecuencia de las palabras (las palabras solo se basan en la frecuencia. ¡No se puede lograr una segmentación inteligente de palabras sin un diccionario! Tarda unos diez minutos, lo que demuestra que la eficiencia es baja. La memoria es Aproximadamente 200 millones de metros, el sistema de segmentación de palabras ICTCLAS se puede utilizar para lograr una segmentación de palabras eficiente.

Descargue ICTCLAS en línea primero, porque lo implementé en C ++ en Windows. del proyecto. Hay todos los archivos (carpetas) en el documento y copie los directorios API, agréguelos al archivo fuente

#Include "ICTCLAS50.h"

# comentario pragma (. lib, "ictlas50.lib")//La biblioteca ictlas50.lib se ha agregado al proyecto.

//

//Para ver su código aquí, consulte el código en la demostración.

//

Simplemente hazlo.

Las interfaces de función aproximadas de C++ se encuentran en la documentación en el archivo Doc:

bool ICTCLAS _ Init( const char * pszInitDir = NULL); Función de inicialización

Valor de retorno

Si la inicialización es exitosa, devuelve verdadero; de lo contrario, devuelve falso. la inicialización no tuvo éxito, verifique el archivo ictclas.log. Conozca la causa detallada del error

Parámetros

PszInitDir: Ruta de inicialización, que debe incluir el archivo de configuración (Configure. xml), directorio de diccionario (directorio de datos) y archivo de autorización (user.lic). Si estos archivos y directorios están ubicados en el directorio actual donde se está ejecutando el sistema, este parámetro puede ser nulo

bool ICTCLAS. _ Salir(); Salir para liberar memoria

Valor de retorno

p>

Devuelve verdadero correctamente; de ​​lo contrario, devuelve falso.

Unsigned int ICTCLAS _ import; user dict(const char * sFilename, eCodeType eCT)

//Importar diccionario definido por el usuario

Valor de retorno

Número de palabras importadas correctamente

Parámetros

SFilename: archivo de diccionario definido por el usuario

ECT: formato de codificación

int ICTCLAS _ ParagraphProcess(const char * sParagraph, int nPaLen , eCodeType eCt, int bPOStagged, char * sResult); // Segmentación de un párrafo de texto

Valor de retorno

Devuelve un puntero al búfer de resultados (sResult) y la longitud r. del resultado.

Parámetros

SParagraph: Segmento de texto original

NPaLen: La longitud del segmento de texto.

ECodeType: formato de codificación del segmento de texto.

BPOStagged: ¿Es necesario etiquetar según el conjunto de etiquetas? 0 = marcado; 1 = no marcado; el valor predeterminado es 1.

SResult: Resultados de salida.

t _ pstRstVec ICTCLAS _ ParagraphProcessA(const char * sParagraph, int PaLen, eCodeType eCodeType, int bPOStagged, int & ampnRstCnt

//Procesar segmento de texto

<); p>Valor de retorno

Puntero de vector de resultado, llamada al sistema, el usuario no puede asignar ni liberar.

Resultados de tensión estructural{

int start//posición inicial

int length; //longitud

#ifdef POS_TAGGER

INTIPO; // posición

char sPOS[POS_SIZE]; //tipo de palabra

#endif

int palabra _ ID//word_ID

int word _ type//¿Es una palabra en el diccionario del usuario? (0-no, 1-sí)

int peso; //peso de palabra

};

Parámetros

SPárrafo: original Segmento de texto

NPaLen: La longitud del segmento de texto.

ECodeType: Formato de codificación

BPO ha sido marcado:

¿Es necesario marcarlo de acuerdo con el conjunto de etiquetas? 0 = marcado; 1 = no marcado; el valor predeterminado es 1.

NRstcnt: el valor de longitud del resultado del procesamiento.

Consulta el archivo Doc para conocer el uso detallado.

bool ICTCLAS _ file process(const char * sSrcFilename, eCodeType eCt, const char *sDsnFilename, int bPOStagged //Procesar archivo txt

Valor de retorno

Devuelve verdadero si el archivo de texto se procesa correctamente; falso en caso contrario.

Parámetros

SSourceFilename: Archivo de procesamiento original

ECodeType: Formato de codificación del archivo original

SDsnFilename: Nombre del archivo utilizado para almacenar los resultados t .

BPOStagged: ¿Es necesario etiquetar según el conjunto de etiquetas? 0 = marcado; 1 = no marcado; el valor predeterminado es 1.

Cosas a tener en cuenta

Antes de llamar a esta función, debe llamar a la función init con éxito. El formato de salida se puede cambiar a través de la configuración de ICTCLAS, lo que requiere aprender el archivo de configuración.

int ICTCLAS _ SetPOSmap(int NPOs map); //Establece el conjunto de anotaciones

Valor de retorno

El éxito es 1, de lo contrario es 0.

Parámetros

nPOSmap:

ICT_POS_MAP_FIRST calcula el conjunto de anotaciones de primer nivel.

ICT_POS_MAP_SECOND Calcular el conjunto de anotaciones secundarias PKU_POS_MAP_SECOND Conjunto de anotaciones secundarias de la Universidad de Pekín PKU_POS_MAP_FIRST Conjunto de anotaciones primarias de la Universidad de Pekín.

int ICTCLAS _ GetWordId(const char * sWord, int nWrdLen, ecode type eCT

Valor de retorno

El ID de la palabra (creo que sí); está en el diccionario La ubicación de almacenamiento, se desconoce la estructura específica del diccionario)

Parámetros

Sword: palabra de destino

NWrdLen: longitud de la palabra

ECodeType: formato de codificación

bool ICTCLAS _ result free(t _ pstRstVec pret vec)

// Libera el puntero vectorial obtenido llamando a ICTCLAS_ParagraphProcessAW.

Valor de retorno

El éxito es 1, el fracaso es 0.

Parámetros

Puntero vectorial de t_pstrstvec: ictklas_paragraphprocessaw

Resumen: Estas funciones son muy fáciles de usar. Necesito usar la función de procesamiento de archivos ICTCLAS_FileProcess. Mi pregunta es: no hay problema en llamar a esta función sola, pero después de llamar a dos CFileDialogs que seleccionan la ruta del archivo abierto y guardan la ruta del archivo resultante en la interfaz MFC, ¡la inicialización de ICTCLAS_Init fallará! Estuve deprimido durante mucho tiempo, mirando el archivo ICTCLAS.log,

Ruta predeterminada: E:\ test_ICTCLAS\test_ICTCLAS\test_ICTCLAS

Iniciar la licencia controlar.

¡Permiso exitoso! No se puede abrir el diccionario del usuario

e:\ test _ ICTCLAS \ test _ ICTCLAS \ test _ ICTCLAS \ Data \ user pdat.

No se puede abrir el archivo E:\test_ICTCLAS\test_ICTCLAS\test_ICTCLAS\Data\user dict .map.

No se puede abrir el diccionario del usuario E:\test_ICTCLAS\test_ICTCLAS\test_ICTCLAS\Data\user dict.pos.

¡Descarga el diccionario!

Sin excepciones. La carga falló porque no hay un diccionario personalizado.

Después de una investigación cuidadosa, se descubrió que Boolictclas_init(const char * pszinitdir = null) tiene una ruta de trabajo predeterminada. Cuando no se abre CFileDialog, la ruta predeterminada es la ruta de ejecución del archivo exe, pero si no se configura después de abrir, la ruta de trabajo cambiará. Es por eso que cuando hace clic en la ruta CFileDialog para cambiar, no se puede encontrar el archivo debajo de la ruta y, por supuesto, no se puede inicializar. (pszInitDir: ruta de inicialización, que debe incluir el archivo de configuración (Configure.xml), el directorio del diccionario (directorio de datos) y el archivo de autorización (user.lic). Si estos archivos y directorios están ubicados en el directorio actual donde se está ejecutando el sistema, este parámetro puede ser nulo)

Solución:

Opción 1. Después de cada llamada a CFileDialog para abrir un archivo, se restablece la ruta de trabajo.

Opción 2. Usar rutas absolutas en el programa

Opción 3. El constructor de CFileDialog tiene ocho parámetros. Por lo general, solo se especifica el primero para evitar problemas. De hecho, para resolver este problema, simplemente agregue OFN_NOCHANGEDIR al cuarto parámetro dwFlags.

¡Lo resolví usando el tercer método_! Publicaré el código para el participio final más tarde. También hay algunas cosas que encontré en el medio (Microsoft me torturó hasta la muerte usando CString LPS CSTR CHAR * Const CHAR * Unicode y multibyte, ¡así que no hablaré de eso cuando tenga tiempo)!

Sigue adelante.