R текстовый майнинг - удалить специальные символы и кавычки - PullRequest
0 голосов
/ 23 октября 2018

Я выполняю задачу интеллектуального анализа текста в R.

Задачи:

1) подсчет предложений

2) определение и сохранение кавычек в векторе

Проблемы:

Ложные полные остановки, такие как "..." и точки в заголовках, такие как "Мистер"надо иметь дело с.

В данных основного текста обязательно есть кавычки, и в них будет "...".Я думал извлечь эти цитаты из основного текста и сохранить их в векторе.(есть некоторые манипуляции с ними тоже.)

ВАЖНО ПРИМЕЧАНИЕ: Мои текстовые данные находятся в документе Word.Я использую readtext («путь к файлу .docx») для загрузки в R. Когда я просматриваю текст, кавычки просто «но не \» противоречат воспроизводимому тексту.

path <- "C:/Users/.../"
a <- readtext(paste(path, "Text.docx", sep = ""))
title <- a$doc_id
text <- a$text

Воспроизводимый текст

text <- "Mr. and Mrs. Keyboard have two children. Keyboard Jr. and Miss. Keyboard. ... 
However, Miss. Keyboard likes being called Miss. K [Miss. Keyboard is a bit of a princess ...]
 \"Mom how are you o.k. with being called Mrs. Keyboard? I'll never get it...\". "


#  splitting by "." 
unlist(strsplit(text, "\\."))

Проблема в том, что он разбивается по ложным точкам остановки Решение, которое я пробовал:

# getting rid of . in titles 
vec <- c("Mr.", "Mrs.", "Ms.", "Miss.", "Dr.", "Jr.")
vec.rep <- c("Mr", "Mrs", "Ms", "Miss", "Dr", "Jr")

library(gsubfn)
# replacing . in titles
gsubfn("\\S+", setNames(as.list(vec.rep), vec), text)

Проблема в том, что этоне заменяет [мисс.[Miss

Чтобы определить цитаты:

stri_extract_all_regex(text, '"\\S+"')

, но это тоже не работает.(Он работает с \ "с кодом ниже)

stri_extract_all_regex("some text \"quote\" some other text", '"\\S+"')

Точный ожидаемый вектор:

sentences <- c("Mr and Mrs Keyboard have two children. ", "Keyboard Jr and Miss Keyboard.", "However, Miss Keyboard likes being called Miss K [Miss Keyboard is a bit of a princess ...]", ""Mom how are you ok with being called Mrs Keyboard? I'll never get it...""

Я хотел разделить предложения (чтобы я мог посчитать, сколько предложений в каждомпараграф). И кавычки тоже разделены.

quotes <- ""Mom how are you ok with being called Mrs Keyboard? I'll never get it...""

1 Ответ

0 голосов
/ 24 октября 2018

Вы можете сопоставить все свои текущие vec значения, используя

gsubfn("\\w+\\.", setNames(as.list(vec.rep), vec), text)

То есть \w+ соответствует 1 или более символам слова, а \. соответствует точке.

Далее, если вы просто хотите извлечь кавычки, используйте

regmatches(text, gregexpr('"[^"]*"', text))

" соответствует ", а [^"]* соответствует 0 или более символам, отличным от ".

Есливы планируете сопоставить свои предложения с кавычками, вы можете рассмотреть

regmatches(text, gregexpr('\\s*"[^"]*"|[^"?!.]+[[:space:]?!.]+[^"[:alnum:]]*', trimws(text)))

Подробнее

  • \\s* - 0+ пробелов
  • "[^"]*" - ", 0+ символов кроме " и "
  • | - или
  • [^"?!.]+ - 0+ символов кроме ?, ", ! и .
  • [[:space:]?!.]+ - 1 или более пробелов, ?, ! или . символов
  • [^"[:alnum:]]*- 0+ не алфавитно-цифровых и " символов

R пример кода:

> vec <- c("Mr.", "Mrs.", "Ms.", "Miss.", "Dr.", "Jr.")
> vec.rep <- c("Mr", "Mrs", "Ms", "Miss", "Dr", "Jr")
> library(gsubfn)
> text <- gsubfn("\\w+\\.", setNames(as.list(vec.rep), vec), text)
> regmatches(text, gregexpr('\\s*"[^"]*"|[^"?!.]+[[:space:]?!.]+[^"[:alnum:]]*', trimws(text)))
[[1]]
[1] "Mr and Mrs Keyboard have two children. "                                                       
[2] "Keyboard Jr and Miss Keyboard. ... \n"                                                         
[3] "However, Miss Keyboard likes being called Miss K [Miss Keyboard is a bit of a princess ...]\n "
[4] "\"Mom how are you o.k. with being called Mrs Keyboard? I'll never get it...\"" 
...