แยก POS ที่ติดแท็ก textvectors/ปัจจัย ลงในประโยคด้วย 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 ."

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 ./"

หากไม่ถูกต้อง โปรดแก้ไขคำถามของคุณเพื่อแสดงตัวอย่างผลลัพธ์ที่คุณต้องการ

อัปเดต ด้วยความคิดเห็นที่กระจ่างแจ้งจาก alex และ 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
@Ben ต้องการแยกเฉพาะประโยคโดยไม่มี , ขอบคุณ - person alex; 08.08.2013
comment
@alex คำถามของคุณไม่ชัดเจน คุณพูดว่า 'ฉันต้องแยกประโยคเดียวออกเป็นองค์ประกอบแยกกัน' (เช่น แยกแต่ละประโยคออกเป็นส่วนๆ) และรวม , ในรายการอักขระของคุณเพื่อให้ตรงกัน โปรดใช้ความระมัดระวังมากขึ้นในการถามคำถามเพื่อให้แน่ใจว่าคุณได้รับคำตอบที่คุณต้องการจริงๆ - person Ben; 08.08.2013
comment
@เบน ขอบคุณครับ. ฉันค่อนข้างใหม่และต้องรองรับ ขออภัยสำหรับคำถามที่ไม่ชัดเจน ฉันต้องการ/ต้องการอย่างชัดเจน (ต้องทดสอบสักหน่อย) เฉพาะประโยคที่อยู่ระหว่างตัวพิมพ์ใหญ่และจุดเต็ม ไม่ใช่ , หรือ ; เดิม ขอแสดงความนับถืออย่างสูง :) - person alex; 09.08.2013