Замена символа на \ n в регулярном выражении, а затем превращение текста в корпус Кванта - PullRequest
0 голосов
/ 07 мая 2019

У меня есть текст, который у меня есть OCR'd.OCR поместил много новых строк (\ n), где они не должны были быть.Но также пропустили много новых линий, которые должны были быть там.

Я хочу удалить существующие новые строки и заменить их пробелами.Затем замените определенные символы символами новой строки в необработанном тексте.Затем превратите документы в корпус в квантеде.

Я могу создать основной корпус.Но проблема в том, что я не могу разбить его на абзацы.Если я использую
corpus_reshape (corps, to = "paras", use_docvars = TRUE) Документ не будет разбит.

Если я использую corpus_segment (corps, pattern = "\ n")

Я получаю ошибку.

rm(list=ls(all=TRUE))
library(quanteda)
library(readtext)

# Here is a sample Text
sample <- "Hello my name is Christ-
ina. 50 Sometimes we get some we-


irdness

Hello my name is Michael, 
sometimes we get some weird,


 and odd, results-- 50 I want to replace the 
 50s
"



# Removing the existing breaks
sample <- gsub("\n", " ", sample)
sample <- gsub(" {2,}", " ", sample)
# Adding new breaks
sample <- gsub("50", "\n", sample)

# I can create a corpus
corps <- corpus(sample, compress = FALSE)
summary(corps, 1)

# But I can't change to paragraphs
corp_para <- corpus_reshape(corps, to ="paragraphs", use_docvars = TRUE)
summary(corp_para, 1)

# But I can't change to paragraphs
corp_para <- corpus_reshape(corps, to ="paragraphs", use_docvars = TRUE)
summary(corp_para, 1)

corp_segmented <-  corpus_segment(corps, pattern = "\n")

# The \n characters are in both documents.... 
corp_para$documents$texts
sample

1 Ответ

0 голосов
/ 08 мая 2019

Я рекомендую использовать замену регулярных выражений для очистки текста перед тем, как превратить его в корпус.Хитрость в вашем тексте состоит в том, чтобы выяснить, где вы хотите удалить переводы строк и где вы хотите их сохранить.Я догадываюсь из твоего вопроса, что ты хочешь удалить вхождения "50", но также, возможно, объединить слова, разделенные дефисами и новой строкой.Вы, вероятно, также хотите сохранить две новые строки между текстами?

Многие пользователи предпочитают более простой интерфейс пакета stringr , но я всегда имел тенденцию использовать stringi (на котором строится stringr ).Он допускает векторизованную замену, поэтому вы можете передать ему вектор сопоставляемых шаблонов и замен в одном вызове функции.

library("stringi")

sample2 <- stri_replace_all_regex(sample, c("\\-\\n+", "\\n+", "50"), c("", "\n", "\n"),
  vectorize_all = FALSE
)
cat(sample2)
## Hello my name is Christina. 
##  Sometimes we get some weirdness
## Hello my name is Michael, 
## sometimes we get some weird,
##  and odd, results-- 
##  I want to replace the 
##  
## s

Здесь вы сопоставляете "\\n" как регулярное выражение pattern , но в качестве (буквального) замены . *1017*.

используйте только "\n". В замененном тексте перед последними "s" стоят две новые строки, потому что a) уже был одинпосле "s" в "50s" и b) мы добавили один, заменив 50 новым "\n".

Теперь вы можете создать корпус с quanteda::corpus(sample2).

...