2011-10-25 3 views
1

Je suis curieux de savoir s'il existe une bibliothèque pour python ou javascript pour marquer les phrases d'une chaîne de phrases et mettre une nouvelle ligne à chaque phrase?Javascript ou Python: Newline après chaque phrase

IE:

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum aliquet leo in urna hendrerit placerat. Donec adipiscing dignissim adipiscing. Duis adipiscing mollis cursus. Etiam fringilla elit nec enim sagittis a auctor nisi gravida. Nunc sollicitudin, leo sit amet consequat pharetra, mi orci vestibulum mi, a suscipit odio tellus tincidunt erat. Suspendisse a consequat turpis. Morbi eget ante leo, a dignissim mi. 

à

Lorem ipsum dolor sit amet, consectetur adipiscing elit.\n 
Vestibulum aliquet leo in urna hendrerit placerat.\n 
Donec adipiscing dignissim adipiscing. \n 
Duis adipiscing mollis cursus. Etiam fringilla elit nec enim sagittis a auctor nisi gravida. Nunc sollicitudin, leo sit amet consequat pharetra, mi orci vestibulum mi, a suscipit odio tellus tincidunt erat. \n 
Suspendisse a consequat turpis. \n 
Morbi eget ante leo, a dignissim mi. 
+0

Quelles langues doivent-elles supporter? –

+1

Comment sait-il ne pas inclure une nouvelle ligne après "Duis adipiscing mollis cursus". etc.? – kindall

Répondre

4

Vous êtes à la recherche d'une bibliothèque de langage naturel.

Pour Python, il existe Natural Language Toolkit (NLTK). Par exemple, vous pouvez jeter un oeil à la PunktSentenceTokenizer.

Le PunktSentenceTokenizer divise un texte dans une liste de phrases, en utilisant un algorithme non supervisé pour construire un modèle pour les mots d'abréviation, collocations, et les mots qui commencent phrases. Il doit être entraîné sur une grande collection de texte en clair dans le langage taret avant de pouvoir être utilisé. L'algorithme de ce tokenizer est décrit Kiss & Strunk (2006):

Kiss, Tibor et Strunk, Jan (2006): Unsupervised Phrase multilingue Détection des limites. Linguistique computationnelle 32: 485-525.

Le paquet de données NLTK comprend un tokenizer Punkt pré-formé pour l'anglais.

0

En Python, utilisez str.replace():

>>> s = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum aliquet leo in urna hendrerit placerat. Donec adipiscing dignissim adipiscing. Duis adipiscing mollis cursus. Etiam fringilla elit nec enim sagittis a auctor nisi gravida. Nunc sollicitudin, leo sit amet consequat pharetra, mi orci vestibulum mi, a suscipit odio tellus tincidunt erat. Suspendisse a consequat turpis. Morbi eget ante leo, a dignissim mi." 
>>> print s.replace('. ', '.\n') 
Lorem ipsum dolor sit amet, consectetur adipiscing elit. 
Vestibulum aliquet leo in urna hendrerit placerat. 
Donec adipiscing dignissim adipiscing. 
Duis adipiscing mollis cursus. 
Etiam fringilla elit nec enim sagittis a auctor nisi gravida. 
Nunc sollicitudin, leo sit amet consequat pharetra, mi orci vestibulum mi, a suscipit odio tellus tincidunt erat. 
Suspendisse a consequat turpis. 
Morbi eget ante leo, a dignissim mi. 

, vous aussi être intéressé par le textwrap module.

+0

Notez que bien que cela fonctionne pour les "phrases" que l'OP posté, il échoue si la phrase se termine par un point d'exclamation ou d'interrogation, et échoue également si la phrase contient un mot qui se termine par un point (par exemple 'Mr'). –

0

Si vous êtes à la recherche de javascript qui ferait cela, vous pouvez le faire:

var str = "Lorem ipsum 4.00 dolor sit amet, consectetur adipiscing elit. Vestibulum aliquet leo in urna hendrerit placerat. Donec adipiscing dignissim adipiscing. Duis adipiscing mollis cursus. Etiam fringilla elit nec enim sagittis a auctor nisi gravida. Nunc etc.... sollicitudin, leo sit amet consequat pharetra, mi orci vestibulum mi, a suscipit odio tellus tincidunt erat. Suspendisse a consequat turpis. Morbi eget ante leo, a dignissim mi." 

str = str.replace(/(\S\.)\s*([A-Z])/g, "$1\n$2"); 

Vous pouvez le voir travailler ici: http://jsfiddle.net/jfriend00/NR5Nc/.

Cet algorithme ne fait qu'ajouter une nouvelle ligne si c'est un espace non blanc suivi d'une période suivie d'un espace suivi d'une lettre majuscule. Donc, il est sûr de choses comme $4.00 et etc... qui ne finissent pas réellement les lignes. Il est également flexible sur la quantité d'espace entre les lignes.

Questions connexes