【问题标题】:Split POS tagged textvectors/factors into sentences with R - regex使用 R 将 POS 标记的文本向量/因子拆分为句子 - 正则表达式
【发布时间】:2013-08-08 14:00:37
【问题描述】:

请帮我完成我的小项目。

一个文本元素(因子)有句子(实际上是许多文本元素的列表)。文本带有 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 ."

【问题讨论】:

    标签: regex r text split pos-tagger


    【解决方案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 的一些澄清 cmets,以下是生成所需输出的方法:

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

    【讨论】:

    • . 在你的模式中被视为“任何字符”,而你想要文字 . 我建议 strsplit(r, "/\\$\\.")strsplit(r, "/$.", fixed=TRUE)
    • 我不确定,因为在文字 . 上拆分将无法在 ,!? 上拆分,这似乎是问题所在对于...
    • @BlueMagister strsplit(r, "/$.", fixed=TRUE) 工作 :) 坦克你!
    • @Ben 只想拆分句子,而不需要 ,。谢谢。
    • @alex 您的问题模棱两可,您说“我需要将单个句子分成单独的元素”(即,将每个句子分成几部分)并在要匹配的字符列表中包含 , .请在提问时更加小心,以确保您得到真正需要的答案。
    猜你喜欢
    • 2014-11-02
    • 2016-08-04
    • 2013-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多