2015-06-22 7 views
3

это текст в моем dataframe ФР, который имеет текстовый столбец под названием «problem_note_text»Как разбить текст на две значимые слова в R

SSCIssue: Примечание Диспенсер Failureperformed проверки/dispensor неисправности/спросил магазины взять ноту dispensor, и установить его обратно/по-прежнему сообщение об ошибке говорит передняя дверь открыта/CE, следовательно, ATTN детали reqContact - Оливия Табер 01159063390/7 утра-11 вечера

df$problem_note_text <- tolower(df$problem_note_text) 
df$problem_note_text <- tm::removeNumbers(df$problem_note_text) 
df$problem_note_text<- str_replace_all(df$problem_note_text, " ", "") # replace double spaces with single space 
df$problem_note_text = str_replace_all(df$problem_note_text, pattern = "[[:punct:]]", " ") 
df$problem_note_text<- tm::removeWords(x = df$problem_note_text, stopwords(kind = 'english')) 
Words = all_words(df$problem_note_text, begins.with=NULL) 

Теперь у dataframe, который имеет список слов, но есть wo выстр как

"Failureperformed"

, который должен быть разделен на две значимые слова, как

"Failure" "выполнена".

, как я это делаю, также слова dataframe также содержат такие слова, как

«им», «ч»

, которые не имеют смысла и должны быть удалены, Я не знаю, как этого добиться.

+3

Если нет картины, это не выполнимо – akrun

+5

Как вы относитесь к что-то вроде 'nowhere' - как' no' и 'где' или' now' и 'Here'? – nrussell

+0

Я думал о том, что есть какой-то словарь, который можно использовать для синтаксического анализа предложения. Я использовал функцию qdap all_words для получения слов из предложений, которые у меня были, но несколько слов, похоже, не были хорошо проанализированы, и я получил совместные слова без смысла. –

ответ

7

Учитывая список английских слов, вы можете сделать это довольно просто, просмотрев все возможные расколы слова в списке. Я буду использовать первый хит Google я нашел для моего списка слов, который содержит около 70k строчных слов:

wl <- read.table("http://www-personal.umich.edu/~jlawler/wordlist")$V1 

check.word <- function(x, wl) { 
    x <- tolower(x) 
    nc <- nchar(x) 
    parts <- sapply(1:(nc-1), function(y) c(substr(x, 1, y), substr(x, y+1, nc))) 
    parts[,parts[1,] %in% wl & parts[2,] %in% wl] 
} 

Это иногда работает:

check.word("screenunable", wl) 
# [1] "screen" "unable" 
check.word("nowhere", wl) 
#  [,1] [,2] 
# [1,] "no" "now" 
# [2,] "where" "here" 

Но иногда терпит неудачу, когда соответствующие слова не в списке слов (в данном случае «датчик» не хватает):

check.word("sensoradvise", wl) 
#  
# [1,] 
# [2,] 
"sensor" %in% wl 
# [1] FALSE 
"advise" %in% wl 
# [1] TRUE 

 Смежные вопросы

  • Нет связанных вопросов^_^