2017-10-23 1 views
0

Ich habe den folgenden Zeichenvektor:Split Zeichen Vektor in Sätze

"This is a very long character vector. Why is it so long? I want to split this vector into senteces by using e.g. strssplit. Can someone help me? That would be nice?" 

Ich will es in Sätze aufgeteilt durch das folgende Muster unter Verwendung (dh Zeit - Raum - Großbuchstaben):

"This is a very long character vector." 
"Why is it so long? I want to split this vector into senteces by using e.g. strssplit." 
"Can someone help me?" 
"That would be nice?" 

Daher sollte Periode nach Abkürzungen kein neuer Satz sein. Ich möchte dies mit regulären Ausdrücken in R.

Kann mir jemand helfen?

+1

Was Fragezeichen gibt? Sie haben sich auf zwei verschiedene Arten getrennt? – PoGibas

Antwort

0

Sie könnten das Paket tokenizers dafür verwenden:

library(tokenizers) 
tokenize_sentences(x) 

wo x Ihren Charakter Vektor ist. Es führt zu

[[1]] 
[1] "This is a very long character vector." 

[[2]] 
[1] "Why is it so long?"             
[2] "I want to split this vector into senteces by using e.g. strssplit." 

[[3]] 
[1] "Can someone help me?" 

[[4]] 
[1] "That would be nice?" 

Sie dann unlist nutzen, um die Listenstruktur zu entfernen.

3

Eine Lösung mit strsplit:

string <- "This is a very long character vector. Why is it so long? I think lng. is short for long. I want to split this vector into senteces by using e.g. strssplit. Can someone help me? That would be nice?" 
unlist(strsplit(string, "(?<=[[:punct:]])\\s(?=[A-Z])", perl=T)) 

Ergebnis:

[1] "This is a very long character vector."        
[2] "Why is it so long?"             
[3] "I think lng. is short for long."         
[4] "I want to split this vector into senteces by using e.g. strssplit." 
[5] "Can someone help me?"            
[6] "That would be nice?" 

Dies passt zu jedem von einem Leerzeichen gefolgt Interpunktionszeichen und Großbuchstaben. (?<=[[:punct:]]) behält die Interpunktion in der Zeichenfolge vor dem übereinstimmenden Begrenzer und (?=[A-Z]) fügt den übereinstimmenden Großbuchstaben nach dem übereinstimmenden Begrenzer der Zeichenfolge hinzu.

EDIT: Ich sah gerade Sie nicht nach einem Fragezeichen in Ihrer gewünschten Ausgabe aufgeteilt. Wenn Sie nur nach einem "." Sie können diese verwenden:

unlist(strsplit(string, "(?<=\\.)\\s(?=[A-Z])", perl = T)) 

die

[1] "This is a very long character vector."        
[2] "Why is it so long? I think lng. is short for long."     
[3] "I want to split this vector into senteces by using e.g. strssplit." 
[4] "Can someone help me? That would be nice?"