Cómo utilizar el sistema de segmentación de palabras ictclas para la segmentación de palabras
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
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 retornoPuntero 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 p>
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.