2016-03-26 3 views
2

Ich habe eine Datei 'check_text.txt', die enthält "sagte sagen, sagt machen gemacht". Ich würde gerne Stemming machen, um "sagen sagen sagen machen" zu bekommen. Ich habe versucht, stemDocument in tm Paket zu verwenden, wie folgt, aber nur bekommen "sagte sagen sagen machen". Gibt es eine Möglichkeit, auf Vergangenheitsformen zu stemmen? Ist es notwendig, dies in natürlicher Sprache zu tun? Vielen Dank!stemDocment in tm-Paket funktioniert nicht in der Vergangenheitsform Wort

filename = 'check_text.txt' 
con <- file(filename, "rb") 
text_data <- readLines(con,skipNul = TRUE) 
close(con) 
text_VS <- VectorSource(text_data) 
text_corpus <- VCorpus(text_VS) 
text_corpus <- tm_map(text_corpus, stemDocument, language = "english") 
as.data.frame(text_corpus)$text 

EDIT: Ich habe auch versucht wordStem in SnowballC Paket

> library(SnowballC) 
> wordStem(c("said", "say", "says", "make", "made")) 
[1] "said" "sai" "sai" "make" "made" 

Antwort

3

Wenn ein Datensatz von unregelmäßigen englischen Verben in einem Paket ist, würde diese Aufgabe einfach sein. Ich kenne keine Pakete mit solchen Daten, also habe ich meine eigene Datenbank durch Scraping erstellt. Ich bin mir nicht sicher, ob diese Website alle irregulären Wörter abdeckt. Bei Bedarf möchten Sie nach besseren Websites suchen, um eine eigene Datenbank zu erstellen. Sobald Sie Ihre Datenbank haben, können Sie an Ihrer Aufgabe teilnehmen.

Zuerst verwendete ich stemDocument() und säubere vorhandene Formulare mit -s. Dann sammelte ich vergangene Formen in words (d. H. past), Infinitivformen der vergangenen Formen (d. H. inf1), identifizierte die Reihenfolge der vergangenen Formen in temp. Ich identifizierte weiter die Positionen der vergangenen Formen in temp. Endlich habe ich die Sat-Formulare durch ihre Infinitivformen ersetzt. Ich wiederholte das gleiche Verfahren für Partizipien der Vergangenheit.

library(tm) 
library(rvest) 
library(dplyr) 
library(splitstackshape) 


### Create a database 
x <- read_html("http://www.englishpage.com/irregularverbs/irregularverbs.html") 

x %>% 
html_table(header = TRUE) %>% 
bind_rows %>% 
rename(Past = `Simple Past`, PP = `Past Participle`) %>% 
filter(!Infinitive %in% LETTERS) %>% 
cSplit(splitCols = c("Past", "PP"), 
     sep = "/", direction = "long") %>% 
filter(complete.cases(.)) %>% 
mutate_each(funs(gsub(pattern = "\\s\\(.*\\)$|\\s\\[\\?\\]", 
         replacement = "", 
         x = .))) -> mydic 

### Work on the task 

words <- c("said", "drawn", "say", "says", "make", "made", "done") 

### says to say 
temp <- stemDocument(words) 

### past forms become present form 
### Collect past forms 
past <- mydic$Past[which(mydic$Past %in% temp)] 

### Collect infinitive forms of past forms 
inf1 <- mydic$Infinitive[which(mydic$Past %in% temp)] 

### Identify the order of past forms in temp 
ind <- match(temp, past) 
ind <- ind[is.na(ind) == FALSE] 

### Where are the past forms in temp? 
position <- which(temp %in% past) 

temp[position] <- inf1[ind] 

### Check 
temp 
#[1] "say" "drawn" "say" "say" "make" "make" "done" 


### PP forms to infinitive forms (same as past forms) 

pp <- mydic$PP[which(mydic$PP %in% temp)] 
inf2 <- mydic$Infinitive[which(mydic$PP %in% temp)] 
ind <- match(temp, pp) 
ind <- ind[is.na(ind) == FALSE] 
position <- which(temp %in% pp) 
temp[position] <- inf2[ind] 

### Check 
temp 
#[1] "say" "draw" "say" "say" "make" "make" "do" 
Verwandte Themen