2013-08-08 4 views
0

Пожалуйста, помогите мне в моем небольшом проекте.Разделить POS-тегированные текстовые векторы/факторы на предложения с R-regex

Текстовый элемент (фактор) имеет предложения (на самом деле список многих текстовых элементов). Текст помечен тегом POS. Мне нужно разделить отдельные предложения на отдельные элементы.

Я думаю, мне нужно сопоставить все "./$. ", "!/$. ", "?/$. " и т. Д. С некоторой функцией R и сохранить результат как список факторов. Каждый фактор является предложением.

Образец текста & Код:

library(stingr) 

# Input vector/factor with "/$. " separated sentences 

r <- c("Ich/PPER habe/VAFIN meinen/PPOSAT Berkeley/NN jetzt/ADV seit/APPR 11/CARD Jahren/NN im/APPRART fast/ADV täglichen/ADJA Einsatz/NN ./$. In/APPR der/ART Schule/NN und/KON im/APPRART Studium/NN war/VAFIN der/ART Rucksack/NN meistens/ADV bis/APPR zum/APPRART bersten/ADJA mit/APPR Büchern/NN gefüllt/VVPP ,/$, jetzt/ADV benutze/VVFIN ich/PPER das/ART gute/ADJA Stück/NN auf/APPR dem/ART Weg/NN zur/APPRART Arbeit/NN !/$. Das/ART Volumen/NN -LRB-/TRUNC 30/CARD Liter/NN -RRB-/TRUNC ist/VAFIN enorm/ADJD und/KON lässt/VVFIN sich/PRF ,/$, dank/APPR der/ART Form/NN ,/$, besonders/ADV für/APPR Bücher/NN und/KON Schreibutensilien/NN ideal/ADJD nutzen/VVINF ./$.") 

# output list of vectors/factors with splited sentences as list elements 
(r.listOfSent <- as.list(strsplit(as.character(r), "//$."))) 
> r.sentlist 
[[1]] 
[1] "Ich/PPER habe/VAFIN meinen/PPOSAT Berkeley/NN jetzt/ADV seit/APPR 11/CARD Jahren/NN im/APPRART fast/ADV täglichen/ADJA Einsatz/NN ."                                                      
[2] " In/APPR der/ART Schule/NN und/KON im/APPRART Studium/NN war/VAFIN der/ART Rucksack/NN meistens/ADV bis/APPR zum/APPRART bersten/ADJA mit/APPR Büchern/NN gefüllt/VVPP ,/$, jetzt/ADV benutze/VVFIN ich/PPER das/ART gute/ADJA Stück/NN auf/APPR dem/ART Weg/NN zur/APPRART Arbeit/NN ."                 
[3] " Das/ART Volumen/NN -LRB-/TRUNC 30/CARD Liter/NN -RRB-/TRUNC ist/VAFIN enorm/ADJD und/KON lässt/VVFIN sich/PRF ,/$, dank/APPR der/ART Form/NN ,/$, besonders/ADV für/APPR Bücher/NN und/KON Schreibutensilien/NN ideal/ADJD nutzen/VVINF ." 

ответ

1

Это то, что вы после этого?

# input 
r <- "Ich/PPER habe/VAFIN meinen/PPOSAT Berkeley/NN jetzt/ADV seit/APPR 11/CARD Jahren/NN im/APPRART fast/ADV täglichen/ADJA Einsatz/NN ./$. In/APPR der/ART Schule/NN und/KON im/APPRART Studium/NN war/VAFIN der/ART Rucksack/NN meistens/ADV bis/APPR zum/APPRART bersten/ADJA mit/APPR Büchern/NN gefüllt/VVPP ,/$, jetzt/ADV benutze/VVFIN ich/PPER das/ART gute/ADJA Stück/NN auf/APPR dem/ART Weg/NN zur/APPRART Arbeit/NN !/$. Das/ART Volumen/NN -LRB-/TRUNC 30/CARD Liter/NN -RRB-/TRUNC ist/VAFIN enorm/ADJD und/KON lässt/VVFIN sich/PRF ,/$, dank/APPR der/ART Form/NN ,/$, besonders/ADV für/APPR Bücher/NN und/KON Schreibutensilien/NN ideal/ADJD nutzen/VVINF ./$." 

# function to split sentences at commas, periods and other punctuation marks 
# really we're just splitting at /$ in the string 
r.listOfSent <- unlist(strsplit(r, "\\$.")) 

# output 
[1] "Ich/PPER habe/VAFIN meinen/PPOSAT Berkeley/NN jetzt/ADV seit/APPR 11/CARD Jahren/NN im/APPRART fast/ADV täglichen/ADJA Einsatz/NN ./"          
[2] " In/APPR der/ART Schule/NN und/KON im/APPRART Studium/NN war/VAFIN der/ART Rucksack/NN meistens/ADV bis/APPR zum/APPRART bersten/ADJA mit/APPR Büchern/NN gefüllt/VVPP ,/" 
[3] " jetzt/ADV benutze/VVFIN ich/PPER das/ART gute/ADJA Stück/NN auf/APPR dem/ART Weg/NN zur/APPRART Arbeit/NN !/"                
[4] " Das/ART Volumen/NN -LRB-/TRUNC 30/CARD Liter/NN -RRB-/TRUNC ist/VAFIN enorm/ADJD und/KON lässt/VVFIN sich/PRF ,/"               
[5] " dank/APPR der/ART Form/NN ,/"                                    
[6] " besonders/ADV für/APPR Bücher/NN und/KON Schreibutensilien/NN ideal/ADJD nutzen/VVINF ./" 

Если это не так, пожалуйста, отредактируйте свой вопрос, чтобы показать образец желаемого результата.

UPDATE благодаря некоторым уточняющим комментариям от Алекса и Голубого Магистра, вот как произвести желаемый результат:

# function to split the string on the literal $. 
r.listOfSent <- strsplit(r, "/$.", fixed=TRUE) 

# which gives 
[[1]] 
[1] "Ich/PPER habe/VAFIN meinen/PPOSAT Berkeley/NN jetzt/ADV seit/APPR 11/CARD Jahren/NN im/APPRART fast/ADV täglichen/ADJA Einsatz/NN ."                                      
[2] " In/APPR der/ART Schule/NN und/KON im/APPRART Studium/NN war/VAFIN der/ART Rucksack/NN meistens/ADV bis/APPR zum/APPRART bersten/ADJA mit/APPR Büchern/NN gefüllt/VVPP ,/$, jetzt/ADV benutze/VVFIN ich/PPER das/ART gute/ADJA Stück/NN auf/APPR dem/ART Weg/NN zur/APPRART Arbeit/NN !" 
[3] " Das/ART Volumen/NN -LRB-/TRUNC 30/CARD Liter/NN -RRB-/TRUNC ist/VAFIN enorm/ADJD und/KON lässt/VVFIN sich/PRF ,/$, dank/APPR der/ART Form/NN ,/$, besonders/ADV für/APPR Bücher/NN und/KON Schreibutensilien/NN ideal/ADJD nutzen/VVINF ." 
+0

'.' в вашем шаблоне в настоящее время рассматриваются как«любой символ», когда вместо этого вы хотите Литерал '.' Я предлагаю' strsplit (r, "/ \\ $ \\.") 'или' strsplit (r, "/ $.", fixed = TRUE) '. –

+0

Я не уверен в этом, так как расщепление на буквенном '.' не будет разбиваться на', 'и'! 'И'? ', Что, кажется, задает вопрос ... – Ben

+0

** @ BlueMagister ** 'strsplit (r,"/$. ", Fixed = TRUE)' works :) Танк вас! – alex