2010-09-09 16 views
6

Duplicar posibles:
PHP - How to split a paragraph into sentences.Expresión regular para contar las oraciones en un bloque de texto

Tengo un bloque de texto que me gustaría separar en frases, ¿cuál sería el la mejor manera de hacer esto? Pensé en buscar '.', '!', '?' personajes, pero me di cuenta de que había algunos problemas con esto, como cuando las personas usan acrónimos o terminan una oración con algo como!?. ¿Cuál sería la mejor manera de manejar esto? Pensé que habría algunos regex que podrían manejar esto, pero estoy abierto a una solución no regex si eso se ajusta mejor al problema.

Respuesta

2

Regex no es la mejor solución para este problema. Se te serviría mejor creando una biblioteca de análisis sintáctico. Algo donde puedes crear fácilmente bloques lógicos para distinguir una cosa de otra. Tendrá que idear un conjunto de reglas para dividir el texto en los fragmentos que le gustaría ver.

"Are you sure?" he asked. 

¿Eso no estropea las cosas cuando se usa regex? Sin embargo, con un analizador podría ver

<start quote><capitalization>are you sure<question><end quote>he asked<period> 

que con reglas simples podría decir "esa es una oración".

+1

O, molestamente, podrías obtener cosas como '" ¿Estás seguro? preguntó "cuáles son semánticamente correctos, pero miren tan mal". Además, los sustantivos que contienen signos de puntuación también son malos: '¿Cuál? recomiendo comprar ... ' –

+0

¿En realidad el? debe estar dentro de las comillas. –

1

Desafortunadamente no existe una solución perfecta para esto, por las mismas razones que usted indicó. Si está contento de que de alguna manera puede controlar o forzar un delimitador específico después de cada oración, sería ideal. Más allá de eso, todo lo que realmente puedes hacer es buscar (\.|!|?)+ y tal vez incluso lanzar un \ s después de eso ya que la mayoría de las personas rellenan oraciones nuevas con 1 o 2 espacios entre la oración anterior y la siguiente.

0

¡Creo que el mayor problema es la posible existencia de acrónimos! Por lo tanto, debe usar algo como Prof.&nbsp;Knuth en una oración de resumen de JavaDoc para que el generador de javadoc no crea que la primera oración finaliza después de Prof.. Este es un problema que no sé cómo alguien puede manejar de manera confiable. La única solución aproximada que podría imaginar es el uso de un diccionario de abreviatura.

+0

No hay acrónimos (palabras formadas a partir de las iniciales de otras palabras, es decir, ASAP) en su ejemplo, solo una abreviatura (una palabra representada por un subconjunto principal de las letras habituales). – dmckee

Cuestiones relacionadas