La desambiguación de límites de oraciones ( SBD ), también conocida como ruptura 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 los límites de las oraciones puede resultar desafiante 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. Alrededor del 47% de los puntos del 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 emoticonos , códigos informáticos y jerga .
Algunos idiomas, incluidos el japonés y el chino, tienen marcadores de final de oración inequívocos.
El enfoque estándar ' vainilla ' para localizar el final de una oración: [ se necesita aclaración ]
Esta estrategia consigue que alrededor del 95% de las frases sean correctas. [2] Cosas como nombres abreviados, por ejemplo, " DH Lawrence " (con espacios en blanco entre las palabras individuales que forman el nombre completo), ortografías ortográficas idiosincrásicas utilizadas con fines estilísticos (a menudo refiriéndose 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 puntuación) en un texto a menudo se encuentran 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 las frases están marcadas previamente. Las soluciones se han basado en un modelo de máxima entropía . [3] La arquitectura SATZ [4] utiliza una red neuronal para eliminar la ambigüedad de los límites de las oraciones 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 )