2012-05-02 23 views
8

esto es más una cuestión de algoritmos en lugar de una pregunta lenguaje específico, así que estoy feliz de recibir una respuesta en cualquier idioma - incluso pseudocódigo, incluso sólo una idea.texto limpio procedente de archivos PDF

Aquí está mi problema: Tengo que trabajar en la gran base de datos de artículos que provienen de artículos en formato PDF y que se copiaron brutalmente/pegado en .txt. Solo tengo el resultado de esta abominación, que es alrededor de 16k documentos, para 3,5 GB o texto (el corpus que estoy usando es ACL Antology Network, http://clair.si.umich.edu/clair/aan/DatasetContents.html).

El "junco" proviene de cosas como fórmulas, imágenes, tablas, etc. Simplemente aparece en medio del texto en ejecución, por lo que no puedo usar expresiones regulares para limpiarlo, y tampoco puedo pensar en ninguna forma de usar el aprendizaje automático. Ya pasé una semana en él, y luego decidí seguir adelante con una solución sucia & rápida. Ya no me importa limpiarlo por completo, no me importan los falsos negativos y positivos siempre que se eliminen la mayoría de estas áreas de texto.

Algunos ejemplos del texto: tenga en cuenta que las fórmulas contienen caracteres basura, pero las tablas y subtítulos de no hacerlo (pero todavía hacen mi sentencia muy larga, y por lo tanto no se puede analizar). Basura en negrita

fácil:

Se repitieron los experimentos, mientras que la inhibición de especialización de primero el esquema con la mayoría de expansiones, y luego los dos esquemas más expandido. Las medidas de cobertura y aceleración son importantes 1 Siempre que nos interese preservar la estructura f asignada a las oraciones, esta noción de cobertura es más estricta de lo necesario. La misma estructura f puede de hecho ser asignada por más de un análisis, de modo que en algunos casos una oración se considera fuera de cobertura incluso si la gramática especializada le asigna la estructura f correcta. 2'VPv 'y' VPverb [main] 'cubren los PV encabezados por un verbo principal. 'NPadj' cubre NP con adjetivos adjuntos. 205 La regla original: l/Pperfp - + ADVP * SE (t ADJUNTO) ($ ADV_TYPE) = t, SAdv ~/r {@M_Head_Perfp I @ M_Head_Passp} @ (Anaph_Ctrl $) {AD VP + SE ('~ ADJUNTO) ($ ADV_TYPE) = vpadv se sustituye por el siguiente: ADVP, [E (~ ADJUNTO) (.l ADV_TYPE) = vpadv l/'Pperfp - + @PPadjunct @PPcase_obl {@M.Head_Pevfp [@M.. ..Head_Passp} @ (Anaph_Ctrl ~) V {@M_Head_Perfp I @ M_Head_Passp} @ (Anaph_Ctrl ~) Figura 1: La poda de una regla de la gramática francesa real. Los signos "*" y "+" tienen la interpretación habitual como en las expresiones regulares. Una sub-expresión entre paréntesis es opcional. Las expresiones secundarias alternativas están encerradas entre llaves y separadas por el signo "[". Una "@" seguida de un identificador es un operador de expansión de macro, y finalmente se reemplaza por descripciones funcionales adicionales. Corpus - .. ,, 0.1 [Banco de árbol de Treebank desambigado Experto humano Especialización gramatical Gramática especializada Figura 2: El escenario de nuestros experimentos sobre especialización gramatical. indicadores de lo que se puede lograr con esta forma de poda gramatical. Sin embargo, podrían ser engañosos, ya que los tiempos de falla para las oraciones descubiertas podrían ser considerablemente más bajos que los tiempos de las oraciones, de no haber estado fuera de cobertura.

Duro:

Tabla 4 resume los resultados de precisión para Inglés y correferencia rumano. Los resultados indican que la correferencia de inglés es más indicativa que la correferencia rumana, pero SNIZZLE mejora la resolución de correferencia en ambos idiomas. Hubo 64% de casos cuando la correferencia inglesa fue resuelta por una heurística con mayor prioridad que la correspondiente heurística para la contraparte rumana. Este resultado explica por qué hay mejor mejora de precisión para Inglés SWIZZLE rumano en inglés SWIZZLE en rumano Nominal Pronominal 73% 89% 66% 78% 76% 93% 71 °/o 82% Tabla 4: precisión de la correferencia total 84% 72 % 87% 76% Inglés SWIZZLE rumano en inglés SWIZZLE en rumano Nominal 69% 63% 66% 61% pronominal Total 89% 78% 83% 72% 87% 77% 80% 70% Tabla 5: Coreferencia recordar la correferencia inglesa. La Tabla 5 también ilustra los resultados de recuperación. La ventaja de la resolución de correferencia basada en datos sobre otros métodos se basa en su mejor rendimiento de recuperación. Esto se explica por el hecho de que este método captura una mayor variedad de patrones de correferencia. A pesar de que otros sistemas de resolución de correferencia funcionan mejor para algunas formas específicas de sistemas, sus resultados de recuperación son superados por el enfoque de sistemas. La correferencia multilingüe a su vez mejora más la precisión que la recuperación de los sistemas de correferencia basados ​​en datos monolingües. Además, la Tabla 5 muestra que la equivalencia en inglés resulta en un recuerdo mejor que la coreía rumana. Sin embargo, la recuperación muestra una disminución en ambos idiomas para SNIZZLE porque se eliminan los enlaces de correferencia imprecisos. Como suele ser el caso, la eliminación de datos reduce la recuperación. Todos los resultados se obtuvieron utilizando el programa automático de puntuación desarrollado para las evaluaciones MUC.

Tenga en cuenta que la tabla no contiene caracteres extraños y va justo en el medio de la frase: "Este resultado explica por qué hay una mejora de precisión para -TABLE AQUÍ- la correferencia inglesa". No puedo saber dónde estará la tabla con respecto al texto en ejecución. Puede ocurrir antes de una oración, después de ella o dentro de ella, como en este caso. También tenga en cuenta que la mierda de mesa no termina con un punto (la mayoría de los títulos en los papeles no ...) por lo que no puedo confiar en la puntuación para detectarlo. Estoy contento con los límites no precisos, por supuesto, pero todavía tengo que hacer algo con estas tablas. Algunos de ellos contienen palabras en lugar de números, y no tengo suficiente información en esos casos: no hay personajes adictos, nada. Es obvio que sólo los seres humanos: S

+1

En lugar de etiquetas de idioma específicas, utilice la etiqueta 'language-agnostic'. –

+0

Oh, está bien. Lo siento, no lo sé =) – Tex

+1

Así que, para que quede claro, quieres sacar el "junco", ¿verdad? –

Respuesta

1

(odio cutres copia & pastas.)

Pocas ideas que le puede resultar útil (he usado todos y cada uno de ellos a mí mismo en ese momento u otro)

  1. (Muy fuerza bruta): utilizando un tokenizer y un diccionario (diccionario real, no la estructura de datos) - analizar las palabras y cualquier palabra que no sea una palabra de diccionario - eliminarlo. Puede ser problemático si el texto contiene muchos nombres de compañías/productos, pero esto también se puede resolver usando los índices correctos (hay algunos en la web). Estoy usando algunos correctos para no poder compartirlos. lo siento)

  2. Dado un conjunto de documentos limpios (digamos un 2K), compilar un índice tf/idf de ellos, y usar esto como un diccionario - cada término de los otros documentos que no aparece en el índice (o aparece con un tf/idf muy bajo) - eliminarlo. Esto debería darte un documento bastante limpio.

  3. Utilice el mecanismo de turk mecánico de Amazon: configure una tarea donde la persona que lee el documento necesita marcar el párrafo que no tiene sentido. Debería ser bastante fácil para la plataforma mecánica turca (16.5K no es mucho) - esto probablemente le cueste un par de cientos de dólares, pero es probable que obtenga una buena limpieza del texto (entonces, si se trata de dinero corporativo, esa puede ser su salida), tienen que pagar por sus errores :)).

  4. Considerando que sus documentos son del mismo dominio (los mismos temas, en general), y los problemas son bastante similares (mismos encabezados de tabla, aproximadamente las mismas fórmulas): rompa todos los documentos en oraciones, e intente agrupar oraciones usando ML. Si los encabezados/fórmulas de la tabla son relativamente similares, deben agruparse muy bien lejos del resto de las oraciones, y luego puede limpiar los documentos oración por oración (Obtenga un documento, divídalo en oraciones, para cada oración, si es parte del clúster "extraño", quítelo)

+0

¡Gracias! Muy buenos consejos :-) Desafortunadamente no puedo usar el primero porque estoy trabajando en textos científicos (para que los nombres del sistema no se encuentren fácilmente) y también para mi disertación de maestría (por lo que el Turk mecánico es un no -go bien D:). Me falta un corpus decente de documentos de lingüística computacional tampoco, por lo que el segundo enfoque también es un problema. Eso deja la agrupación, aparentemente sin ninguna carga: D – Tex

+0

Me alegro de poder ayudar :) Si la agrupación falla, limpie hasta 200 documentos de forma manual y úselos para construir un cuerpo limpio - entonces probablemente pueda usar el primera sugerencia – Yossale