2011-07-23 27 views
23

Quiero saber si hay una API para hacer análisis de texto en Java. Algo que puede extraer todas las palabras en un texto, separar palabras, expresiones, etc. Algo que puede informar si se encuentra una palabra es un número, fecha, año, nombre, moneda, etc.¿Hay API para análisis/minería de textos en Java?

Estoy comenzando el análisis de texto ahora, entonces solo necesito una API para comenzar. Hice un rastreador web, ahora necesito algo para analizar los datos descargados. Se necesitan métodos para contar la cantidad de palabras en una página, palabras similares, tipo de datos y otros recursos relacionados con el texto.

¿Hay API para el análisis de texto en Java?

EDITAR: minería de texto, quiero extraer el texto. Una API para Java que proporciona esto.

+1

Hubo algunas buenas respuestas en este hilo http://stackoverflow.com/questions/3778388/java-text-analysis-libraries – crowne

+0

Quiero extraer información de películas de páginas descargadas. Cosas como título, actores, año, director, etc. –

+0

@Renato Dinhani Conceição ¿Todas sus páginas descargadas tienen una estructura html común? (¿páginas web con plantilla?) – stemm

Respuesta

10

Por ejemplo, puede usar algunas clases de la biblioteca estándar java.text, o usar StreamTokenizer (puede personalizarlas de acuerdo con sus requisitos). Pero como saben - datos de texto a partir de fuentes de Internet es por lo general tiene muchos errores ortográficos y para un mejor rendimiento que tiene que usar algo como difusa tokenizer - java.text y otras utilidades standart tiene capacidades limitadas también en este contexto.

Por lo tanto, yo le aconsejo utilizar expresiones regulares (java.util.regex) y crear propio tipo de tokenizer de acuerdo a sus necesidades.

P.S. De acuerdo con sus necesidades, puede crear un analizador de máquina de estado para reconocer las partes con plantilla en los textos en bruto. Puede ver el reconocedor de máquina de estado simple en la imagen a continuación (puede construir un analizador más avanzado, que podría reconocer plantillas mucho más complejas en el texto).

enter image description here

8

Si se trata de grandes cantidades de datos, tal vez Apache de Lucene ayudará con lo que necesite.

De lo contrario, podría ser más fácil crear su propia clase de Analizador que se apoye fuertemente en la clase de Patrón estándar. De esta forma, puede controlar qué texto se considera una palabra, un límite, un número, una fecha, etc. Por ejemplo, ¿20110723 es una fecha o número? Es posible que necesite implementar un algoritmo de análisis de paso múltiple para "comprender" mejor los datos.

26

Parece que está buscando Named Entity Recogniser.

Tienes un par de opciones.

CRFClassifier del Stanford Natural Language Processing Group, es una implementación de Java de un reconocedor de entidades con nombre.

GATE (General Architecture for Text Engineering), un conjunto de código abierto para el procesamiento del lenguaje. Eche un vistazo a las capturas de pantalla en la página para desarrolladores: http://gate.ac.uk/family/developer.html. Debería darle una breve idea de lo que esto puede hacer. El video tutorial le brinda una mejor visión general de lo que este software tiene para ofrecer.

Es posible que deba personalizar uno de ellos para satisfacer sus necesidades.

También tienen otras opciones:


En cuanto a la formación de CRFClassifier, se puede encontrar una brief explanation at their FAQ:

... los datos de entrenamiento deben estar en columnas separadas por tabuladores, y definir el significado de los columnas a través de un mapa. Una columna debe ser llamada "respuesta" y tiene la clase NER, y las características existentes saben sobre nombres como "palabra" y "etiqueta". Usted define el archivo de datos, el mapa, y qué características generar a través de un archivo de propiedades. No es considerable documentación de lo que cuenta con diferentes propiedades generan en el Javadoc de NERFeatureFactory, aunque en última instancia se tiene que ir al código fuente para responder a algunas preguntas ...

También puede encontrar un fragmento de código en la javadoc of CRFClassifier:

típico de línea de comandos de uso

Para la ejecución de un modelo entrenado con un clasificador serializado proporcionada en un archivo de texto :

java -mx500m edu.stanford.nlp.ie.crf.CRFClassifier -loadClassifier conll.ner.gz -textFile samplesentences.txt

Al especificar todos los parámetros en un archivo de propiedades (tren, prueba o tiempo de ejecución):

java -mx1g edu.stanford.nlp.ie.crf.CRFClassifier -prop propFile

para entrenar y probar un modelo NER sencilla desde la línea de comandos:

java -mx1000m edu.stanford.nlp.ie.crf.CRFClassifier -trainFile trainFile -testFile testFile -macro > output

+0

¿Puedes proporcionar un ejemplo de código de CRFClassifier para entrenar y clasificar? –

+0

No he trabajado con la biblioteca, pero sí encontré documentación, aunque un poco dispersa. Ver la información de adición anterior ... –

+0

Estoy usando CRFClassifier. Parece fácil de configurar. –

1

Recomiendo mirar LingPipe también. Si está de acuerdo con los servicios web, entonces this article tiene un buen resumen de diferentes API

2

Preferiría adaptar las clases de Análisis y Stemmer de Lucene en lugar de reinventar la rueda. Tienen una gran mayoría de casos cubiertos. Ver también las clases adicionales y contrib.

Cuestiones relacionadas