2011-03-09 12 views
11
Mar 9, 2011 1:22:06 PM edu.stanford.nlp.process.PTBLexer next 
WARNING: Untokenizable: � (U+FFFD, decimal: 65533) 
Mar 9, 2011 1:22:06 PM edu.stanford.nlp.process.PTBLexer next 
WARNING: Untokenizable: � (U+FFFD, decimal: 65533) 
Mar 9, 2011 1:22:06 PM edu.stanford.nlp.process.PTBLexer next 
WARNING: Untokenizable: � (U+FFFD, decimal: 65533) 
Mar 9, 2011 1:22:06 PM edu.stanford.nlp.process.PTBLexer next 
WARNING: Untokenizable: � (U+FFFD, decimal: 65533) 
Mar 9, 2011 1:22:06 PM edu.stanford.nlp.process.PTBLexer next 
WARNING: Untokenizable: � (U+FFFD, decimal: 65533) 
Mar 9, 2011 1:22:06 PM edu.stanford.nlp.process.PTBLexer next 
WARNING: Untokenizable: � (U+FFFD, decimal: 65533) 
Mar 9, 2011 1:22:06 PM edu.stanford.nlp.process.PTBLexer next 
WARNING: Untokenizable: � (U+FFFD, decimal: 65533) 

Estos son los errores que obtengo cuando quiero asignar etiquetas POS a oraciones. Leí oraciones de un archivo. Inicialmente (por pocas oraciones) no obtengo este error (es decir, eterno), pero después de leer algunas oraciones aparece este error. Yo uso v2.0 (es decir, 2009) del etiquetador de POS y el modelo es left3words.Etiquetador POS de Stanford en el uso de Java

+0

Parece que está compartiendo apis internas, elimine eso y ponga su pregunta genérica y el mensaje de excepción requerido. no con nombres de clase. por restricciones de seguridad ... –

+1

¿podría publicar la solución a esto? –

Respuesta

8

Estoy de acuerdo con Yuval - un problema de codificación de caracteres, pero el caso más común es en realidad cuando el archivo está en una codificación de un solo byte como ISO-8859-1 mientras el etiquetador intenta leerlo en UTF-8. Vea la discusión de U + FFFD en Wikipedia.

+0

En realidad, no estoy dando un archivo como un todo para etiquetar. Ofrezco oraciones extraídas de un archivo para etiquetar. El código que he usado en mi proyecto es el siguiente: Lista > oraciones = MaxentTagger.tokenizeText (nuevo StringReader (string1)); for (Oración oración: oraciones) { Sentencia tSentence = MaxentTagger.tagSentence (oración); tag_s1_local = tSentence.toString (falso); } – KNsiva

+0

Pero parece que su cadena de entrada tiene caracteres U + FFFD, lo que normalmente no debería ocurrir, y parece reflejar un problema anterior con la codificación de caracteres en cualquier código que produzca esa cadena. ¿Qué obtienes si solo imprimes los caracteres de String uno por uno con charAt()? –

+0

Está imprimiendo los caracteres originales para algunas oraciones que no tienen caracteres como!, "," .. etc. pero cuando se encuentra con estos caracteres surge el problema. – KNsiva

2

Esto me parece un problema de codificación. ¿Puedes publicar la oración ofensiva? No pude encontrar esto en la documentación, pero trataría de verificar si el archivo está en codificación UTF-8.

+0

he convertido las oraciones en formato UTF-8 después de leerlo de un archivo y tratar de etiquetar. Inicialmente, no hay problema para mí por algunas oraciones. Después de completar algunas oraciones, solo aparece esa advertencia. El código es: String string1 = file_read.readLine(); byte [] utf81 = string1.getBytes ("UTF-8"); string1 = new String (utf81, "UTF-8"); Después de esta línea, String1 se pasa al etiquetador como lo he mostrado en el comentario anterior. – KNsiva

+0

Al leer su código y la respuesta de Christopher Manning, creo que está empezando de la manera equivocada. Su archivo de entrada debe estar en codificación UTF-8 para comenzar. Si está en una codificación de un solo byte, el etiquetador no puede recuperar los caracteres originales. –

+0

A veces, la forma más fácil es simplemente convertir la entrada, pero no es necesario. Cualquier codificación reconocida funcionará. Pero la forma en que tratas de lidiar con las codificaciones parece completamente incorrecta. En Java, si le da la codificación a un InputStreamReader, convertirá los datos a medida que se leen. No puede leer String con la codificación predeterminada (lo que sea que sea ...) y luego intente convertirlo a lo que desee, ya que se perderá al leerlo si las codificaciones no coinciden. Podrías leer bytes a través de un InputStream y luego convertirlos a un Unicode String, pero eso es más doloroso de lo necesario. –

0

Si está leyendo contenido de DOC, Formato de documento portátil (PDF) y luego Use Apache Tika. Extraerá tu contenido. Puede ser que te ayude.

Apache Tika

Sobre tika

Apache Tika es un conjunto de herramientas para detectar y extraer los metadatos y el contenido del texto estructurado a partir de varios documentos utilizando bibliotecas analizador existentes. Está escrito en Java, pero incluye una versión de línea de comando para usar desde otros idiomas.

Más información sobre Tika, el seguimiento de errores, listas de correo, descargas y más están disponibles en http://tika.apache.org/

1

me encontré con este tema, también. Una forma de comprobar si un personaje es tokenizable es comprobar si falla Character.isIdentifierIgnorable(). Un personaje que sea asimilable devolverá true, mientras que todos los caracteres tokenizables devolverán false.

Cuestiones relacionadas