2011-04-13 10 views
7

Estoy tratando de analizar un documento de texto plano en PHP, pero no tengo idea de cómo hacerlo correctamente. Quiero separar cada palabra, asignarles una ID y guardar el resultado en formato JSON.Mejor manera de analizar un documento de texto

texto

muestra:

"Hello, how are you (today)" 

Esto es lo que estoy haciendo en este momento:

$document_array = explode(' ', $document_text); 
json_encode($document_array); 

El JSON resultante es

[["Hello,"],["how"],["are"],["you"],["(today)"]] 

¿Cómo me aseguro de que los espacios se mantienen en -place y que los símbolos no están incluidos junto con las palabras ...

[["Hello"],[", "],["how"],[" "],["are"],[" "],["you"],[" ("],["today"],[")"]] 

Estoy seguro de que se necesita algún tipo de expresión regular ... pero no tengo idea de qué tipo de patrón aplicar para tratar todos los casos ... ¿Alguna sugerencia, chicos?

Respuesta

2

Quizás esto :?

array_filter(preg_split('/\b/', $document_text)) 

la 'array_filter', elimina los valores vacíos en el primer y/o último índice de la matriz resultante, que aparecerá si la cadena se inicia o termina con un límite de palabra (\ b, véase: http://php.net/manual/en/regexp.reference.escape.php)

4

Esto es realmente un problema realmente complejo, y que está sujeto a una buena cantidad de investigación académica. Suena muy simple (solo divídase en el espacio en blanco con algunas reglas para la puntuación ...) pero rápidamente se encuentra con problemas. Es "did not" una palabra o dos? ¿Qué pasa con las palabras con guiones? Algunos podrían ser una palabra, algunos podrían ser dos. ¿Y qué hay de los múltiples caracteres de puntuación sucesivos? Possessives versus quotes? etc. Incluso la determinación del final de una oración no es trivial. (Es solo un punto, ¿no ?!)

Este problema es uno de tokenisation y un tema que los motores de búsqueda toman muy en serio. Para ser honesto, deberías buscar encontrar un tokeniser en el idioma de tu elección.

+0

Sí, una solución de un tercero probablemente sea la mejor opción ... Estoy seguro de que a lo largo de los años han desarrollado reglas bastante complicadas para resolver estos problemas. ¿Alguna sugerencia? –

+1

En php no. Hay un número en Java: Open NLP, Stanford NLP, Lucene's tokeniser y NLTK en python. –

+0

Python es otro lenguaje basado en web ... No lo he usado antes, pero supongo que podría implementar el analizador sintáctico en python, luego enviar el JSON de vuelta a PHP ... de alguna manera –

Cuestiones relacionadas