Разделить текстовые векторы/факторы, помеченные POS, на предложения с помощью R - регулярное выражение

Пожалуйста, помогите мне с моим небольшим проектом.

Текстовый элемент (фактор) имеет предложения (фактически список многих текстовых элементов). Текст имеет 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 ."

person alex    schedule 08.08.2013    source источник


Ответы (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 ./"

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

ОБНОВЛЕНИЕ благодаря поясняющим комментариям Алекса и Blue Magister, вот как можно получить желаемый результат:

# 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 ." 
person Ben    schedule 08.08.2013
comment
. в вашем шаблоне обрабатывается как любой символ, когда вместо этого вам нужен буквальный ., я предлагаю strsplit(r, "/\\$\\.") или strsplit(r, "/$.", fixed=TRUE). - person Blue Magister; 08.08.2013
comment
Я не уверен в этом, так как разделение на буквальное . не сможет разделить на , и ! и ?, что, кажется, является тем, о чем задается вопрос... - person Ben; 08.08.2013
comment
@BlueMagister strsplit(r, "/$.", fixed=TRUE) работает :) Спасибо! - person alex; 08.08.2013
comment
@Бен хотел разделить только предложения без ,. Спасибо. - person alex; 08.08.2013
comment
@alex ваш вопрос неоднозначен, вы говорите: «Мне нужно разделить отдельные предложения на отдельные элементы» (т. Е. Разделить каждое предложение на части) и включить , в свой список символов для соответствия. Пожалуйста, будьте более осторожны, задавая вопросы, чтобы получить ответ, который вам действительно нужен. - person Ben; 08.08.2013
comment
@Бен Спасибо. Я немного новичок и должен приспособиться. Извините за двусмысленный вопрос. Я явно хотел / хочу (должен немного проверить) только предложения, содержащиеся между заглавной буквой и точкой. нет , или ; изначально. Наилучшие пожелания :) - person alex; 09.08.2013