vnet primera poner palabra mayuscula letra ejemplos convertir caracter capital cada java regex split abbreviation

java - poner - primera letra de cada palabra en mayuscula c++



Separa la cadena en oraciones (3)

He escrito este fragmento de código que divide una cadena y la almacena en una matriz de cadenas:

String[] sSentence = sResult.split("[a-z]//.//s+");

Sin embargo, agregué el [az] porque quería tratar algunos de los problemas de abreviatura. Pero entonces mi resultado aparece así:

Además, cuando Everett trató de instruirlos en matemáticas básicas, probaron que no respondían

Veo que pierdo el patrón especificado en la función de división. Está bien que pierda el período, pero perder la última letra de la palabra perturba su significado.

¿Alguien podría ayudarme con esto y, además, alguien podría ayudarme con las abreviaturas? Por ejemplo, debido a que dividí la cadena en función de los períodos, no quiero perder las abreviaturas.


El análisis de oraciones dista mucho de ser una tarea trivial, incluso para los idiomas latinos como el inglés. Un enfoque ingenuo como el que describes en tu pregunta fallará con la suficiente frecuencia como para que resulte inútil en la práctica.

Un mejor enfoque es utilizar un BreakIterator configurado con la configuración regional correcta.

BreakIterator iterator = BreakIterator.getSentenceInstance(Locale.US); String source = "This is a test. This is a T.L.A. test. Now with a Dr. in it."; iterator.setText(source); int start = iterator.first(); for (int end = iterator.next(); end != BreakIterator.DONE; start = end, end = iterator.next()) { System.out.println(source.substring(start,end)); }

Produce el siguiente resultado:

  1. Esto es una prueba.
  2. Esta es una prueba de TLA.
  3. Ahora con un Dr. en eso.

Será difícil hacer que una expresión regular funcione en todos los casos, pero para solucionar su problema inmediato puede usar un vistazo detrás:

String sResult = "This is a test. This is a T.L.A. test."; String[] sSentence = sResult.split("(?<=[a-z])//.//s+");

Resultado:

This is a test This is a T.L.A. test.

Tenga en cuenta que hay abreviaturas que no terminan con letras mayúsculas, como abreviación, Sr., etc. ¡Y también hay oraciones que no terminan en puntos!


Si puede, utilice una herramienta de procesamiento de lenguaje natural, como LingPipe . Hay muchas sutilezas que serán muy difíciles de atrapar utilizando expresiones regulares, por ejemplo, ( por ejemplo :-)), Sr. , abreviaturas , puntos suspensivos (...), etcétera .

Hay un tutorial muy fácil de seguir sobre Detección de oraciones en el sitio web de LingPipe.