在R语言中,有没有一种方法可以分隔缺少空格的句子,比如“第一句,第二句”?

wljmcqd8  于 2023-02-20  发布在  R语言
关注(0)|答案(1)|浏览(255)

我从XML文件中提取了一些句子之间经常缺少空格的文本块,并成功地使用str_split将这些文本块分解为易于理解的句子,如下所示:

list_of_strings <- str_split(chunk_of_text, pattern=boundary("sentence")

这个方法很好用,但是它不能处理句号后面没有空格的情况,例如,"This sentence ends.This sentence continues."它返回一个句子,而不是两个句子。
str_splitpattern=boundary("sentence")一起使用不起作用。
如果我搜索并用句点-空格替换句点,当然会把1.5磅这样的数字搞砸。
我已经探索了使用通配符来检测情况,例如,

str_view_all(x, "[[:alpha:]]\\.[[:alpha:]]"))

但是我不知道如何1)在句点后面插入一个空格,以便后续调用str_split时能够正确工作,或者2)在句点处拆分。
当这种情况发生时,有什么建议吗?
新手R程序员在这里,谢谢你的帮助!

0sgqnhkj

0sgqnhkj1#

library(stringr)

x <- "This sentence ends.This sentence continues. It costs 1.5 pounds.They needed it A.S.A.P.Here's one more sentence."

str_split(x, "\\.\\s?(?=[A-Z][^\\.])")
[[1]]
[1] "This sentence ends"        "This sentence continues"  
[3] "It costs 1.5 pounds"       "They needed it A.S.A.P"   
[5] "Here's one more sentence."

说明:

"\\.                     # literal period
    \\s?                 # optional whitespace
        (?=[A-Z]         # followed by a capital letter 
                [^\\.])" # which isn’t followed by another period

还要注意的是,这并没有考虑到所有的可能性,例如,它会错误地在"Dr."之后分裂为"Dr. Perez is on call.",你可以通过添加一个负的lookbehind来处理这种情况:

"(?<!Dr|Mr|Mrs|Ms|Mx)\\.\\s?(?=[A-Z][^\\.])"

但是具体的内容和其他要处理的边缘情况将取决于您的数据。

相关问题