La desambiguación de límites de oraciones ( SBD ), también conocida como división de oraciones , detección de límites de oraciones y segmentación de oraciones , es el problema en el procesamiento del lenguaje natural de decidir dónde comienzan y terminan las oraciones . Las herramientas de procesamiento del lenguaje natural a menudo requieren que su entrada se divida en oraciones; sin embargo, la identificación de límites de oraciones puede ser un desafío debido a la posible ambigüedad de los signos de puntuación . En inglés escrito , un punto puede indicar el final de una oración, o puede denotar una abreviatura , un punto decimal , una elipsis o una dirección de correo electrónico, entre otras posibilidades. Aproximadamente el 47% de los puntos en el corpus de The Wall Street Journal denotan abreviaturas. [1] Los signos de interrogación y exclamación pueden ser igualmente ambiguos debido a su uso en emoticones , código fuente y jerga .
Algunos idiomas, incluidos el japonés y el chino, tienen marcadores de final de oración inequívocos.
El método estándar " vanilla " para localizar el final de una oración: [ aclaración necesaria ]
Esta estrategia permite obtener respuestas correctas en aproximadamente el 95% de las oraciones. [2] Cosas como nombres abreviados, por ejemplo, " DH Lawrence " (con espacios en blanco entre las palabras individuales que forman el nombre completo), ortografías idiosincrásicas utilizadas con fines estilísticos (que a menudo se refieren a un solo concepto, por ejemplo, el título de un producto de entretenimiento como " .hack//SIGN ") y el uso de puntuación no estándar (o uso no estándar de la puntuación) en un texto a menudo caen dentro del 5% restante.
Otro enfoque consiste en aprender automáticamente un conjunto de reglas a partir de un conjunto de documentos en los que los saltos de frase están marcados previamente. Las soluciones se han basado en un modelo de máxima entropía . [3] La arquitectura SATZ [4] utiliza una red neuronal para desambiguar los límites de las frases y logra una precisión del 98,5 %.
((?<=[a-z0-9][.?!])|(?<=[a-z0-9][.?!]\"))(\s|\r\n)(?=\"?[A-Z])
$sentences = preg_split("/(?<!\..)([\?\!\.]+)\s(?!.\.)/", $text, -1, PREG_SPLIT_DELIM_CAPTURE);
(para PHP )